-
Collection-
List(有序集;线程安全的是CopyOnWriteArrayList)-
ArrayList-
底层结构是数组
transient Object[] elementData;,适合获取元素。 -
扩容时变成原来的1.5倍。
int newCapacity = oldCapacity + (oldCapacity >> 1); -
默认初始长度为0。
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; -
第一次扩容小于10会直接扩容到10。
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { return Math.max(DEFAULT_CAPACITY, minCapacity); } -
实现了
RandomAccess接口,使用for循环比使用Iterator遍历效率高。
-
-
LinkedList- 底层结构是双向链表,适合增删元素。
- 使用
for循环遍历LinkedList效率低。
-
-
Set(不能包含重复的元素;线程安全的是CopyOnWriteArraySet)HashSet- 内部维护一个
HashMap变量。private transient HashMap<E,Object> map; - 通过元素的
hashCode方法和equals方法来确定元素是否重复。
- 内部维护一个
LinkedHashSet- 底层结构是数组 + 单 / 红黑树 + 双链表。
- 元素保持插入顺序。
TreeSet- 内部维护一个
TreeMap变量。 - 元素可以排序。
- 内部维护一个
-
-
Map(键值对,键不能重复;keySet()、values()和entrySet()返回的是视图,即不具有独立的数据;线程安全的是ConcurrentHashMap和HashTable,ConcurrentHashMap加锁粒度更细)-
HashMap- 底层结构是数组 + 单链表 / 红黑树。
- 默认负载因子是0.75。
static final float DEFAULT_LOAD_FACTOR = 0.75f; - 容量是2的幂。
static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1; } -
LinkedHashMap- 底层结构是数组 + 单链表 / 红黑树 + 双链表。
- 元素保持插入顺序。
-
TreeMap- 底层结构是红黑树。
- 元素可以排序。
-