List接口:
ArrayList实现类:
默认容量为10,超出后按照源容量1.5倍+1来扩容,可以指定大小List arrayList = new ArrayList(int n);
grow源码:
LinkedList实现类:
默认容量为10,没有初始化大小,也没有扩容的机制
Vector实现类:
默认容量为10,超出后按照源容量2倍来扩容(未指定增长步长)
grow源码:
Set接口:
HashSet实现类:
默认容量16,加载因子0.75,超出后按照1倍扩容
Map接口:
HashMap实现类:
默认容量为空,元素加入时才开辟空间,节省空间,加载因子0.75,超出后按2倍扩容。
put源码:
(1)
hash(key)返回哈希值高十六位异或低十六位。
好处:散列均匀,减少散列冲突,提高效率。
(2)
第一个if语句:判断是否有元素存入,不为空不为0则对table用resize()扩容。tab=16。
第二个if语句:判断(table.length-1的值) & (hash值)的存储位置是否为空,为空放入。
数组长度为2的n次方:避免哈希冲突,提高检索速度。否则多个数据会放入同一个哈希位置,检索速度慢。
当链表的长度大于8的时候,并且数组长度大于64的时候, 会把链表调整为红黑树,效率提高了,当红黑树的兀素个数小于6的时候,调整为链表。