List 集合
ArrayListlinkedListList 总结 Set 集合
HashSetlinkedHashSetTreeSetSet 总结 Map 集合
HashMaplinkedHashMapTreeMapMap 总结
常用集合有三种,List、Set 和 Map。List 和 Set 都继承了 Collection 接口。而 Map 是顶级接口。
List 集合常用的有两种,ArrayList 和 linkedList。
ArrayListArrayList 使用的是数组作为底层数据结构。
ArrayList 默认最小容量为10,如果创建对象时传入的容量值大于10,则使用大的容量。数组扩容为原先数组的1.5倍。
int newCapacity = oldCapacity + (oldCapacity >> 1);
数组的最大容量为 Integer.MAX_VALUE - 8。
linkedList一些虚拟机在数组中保留一些头字,如果设置最大值会 OOM。
linkedList 在插入数据时会构建尾插链表(双向链表)。
final NodeList 总结l = last; final Node newNode = new Node<>(l, e, null); last = newNode; if (l == null) first = newNode; else l.next = newNode; size++; modCount++;
List 保证了数据的插入顺序,可以有重复数据。
ArrayList 底层是数组,插入/删除数据慢,通过索引查询数据快。
linkedList 底层是尾插链表(双向链表),插入/删除数据快,查询数据慢。
List 遍历方式:
Set 集合通过 for 循环下标。增强 for 循环,forEach。iterator 迭代器。spliterator 迭代器,forEachRemaining()。
Set 集合常用的有:HashSet、linkedHashSet 和 TreeSet。
HashSet底层就是 HashMap,构造器中会创建 HashMap 对象,操作都是调用 HashMap 的方法。
linkedHashSetlinkedHashSet 除了重写了 spliterator 方法,其他全部继承于 HashSet 。
因为重写了 spliterator 方法,遍历能够会保证插入顺序。
底层TreeMap,很多的方法都基于 TreeMap的方法实现(调用 TreeMap 的方法)。
TreeSet 初始化创建 TreeMap对象。
注意:如果使用 TreeSet,泛型类中必须实现 Comparable 接口,或定义外部比较器。
Set 总结Set 保证数据的唯一性,但不会保证顺序性。
HashSet 插入/查询/删除快。
linkedHashSet 有序(时间顺序)。
TreeSet 保存比较器大小顺序。底层红黑树。
Set 遍历方式
Map 集合增强 for 循环,forEach。iterator 迭代器。spliterator 迭代器,forEachRemaining()。
Map 常用的有:HashMap、linkedHashMap 和 TreeMap。
HashMapHashMap理解。
linkedHashMap继承了 HashMap,初始化时会创建 HashMap对象,很多方法直接 super(参数…)。
accessOrder参数来标志记录插入顺序。accessOrder 都被设置为 false。
TreeMap底层红黑树。
Map 总结Map 存储一组键值对对象,无需且唯一的数据。
HashMap key 无序且唯一。
linkedHashMap key 有序(插入次序),唯一。
TreeMap key 有序(比较器顺序),唯一。
Map 遍历方式:
获取到所有的 key 来遍历所有的 value。使用Iterator迭代器迭代。增强for 循环 forEach,get方式,不建议使用。Map接口中默认方法(map.forEach)。使用 entrySet。
private static void method1(HashMap hm) {
// 获取所有key
Set keys = hm.keySet();
for (String key : keys) {
System.out.println(key);
}
Collection values = hm.values();
for (Integer value : values) {
System.out.println(value);
}
}
private static void method2(HashMap hm) {
Set> entries = hm.entrySet();
Iterator> it = entries.iterator();
while (it.hasNext()) {
Map.Entry entry = it.next();
System.out.println(entry);
}
}
private static void method3(HashMap hm) {
Set keys = hm.keySet();
for (String key : keys) {
Integer value = hm.get(key);
System.out.println(key + ":" + value);
}
}
private static void method4(HashMap hm) {
hm.forEach((key, value) -> {
System.out.println(key + ":" + value);
});
}
private static void method5(HashMap hm) {
Set> entries = hm.entrySet();
for (Map.Entry enter : entries) {
System.out.println(enter);
}
}



