ArrayList 由数组构成的List object[] elementData 实际存储的数组 int size 实际长度 int DEFAULT_CAPACITY = 10 初始容量10. 扩容过程:put的时候若是size+1>elementData.length,则对elementData扩容至1.5倍数组
LinkedList 由双向链表构成的数组安全
Vector 由数组构成的线性安全的List 在每一个方法前加synchronized来保证安全。优化
保存KV对,K不可重复code
int DEFAULT_INITIAL_CAPACITY = 1 << 4
数组默认长度16 final float loadFactor; 负载因子,初始值0.75.当前数组长度 * loadFactor来判断是否须要扩容。 int threshold ; The next size value at which to resize (capacity * load factor). 扩容过程:若是size+1 > threshold 则进行扩容,table长度扩大2倍。而后链表上的一一挪到正确的新的数组上。1.8之后HashMap下的链表进行优化了,改为当链表的长度大于8的时候优化成红黑树。blog
ConcurrentHashMap 线性安全的,经过分段把锁的粒度下降,提升效率ci
Hashtable 线性安全,经过方法前加上synchronized来锁,效率较低。element
保存K HashMap<E,Object> map; public boolean add(E e) { return map.put(e, PRESENT)==null; }
HashSet内部实际是一个HashMap,把值做为Key放入HashMap中。it