hashMap源码
- 创建不指定大小的话,集合不进行初始化,第一次添加的时候进行初始化。
- 初始化长度为16,阈值为0.75
- 自动增加长度时机为16 * 0.75=12,当长度达到12时,增加长度,默认增加为2 * length,也就是2*16=32
- hashMap的数据结构为数组+链表的结构
- 存储方式为key的hash值对(length-1)取余为数组角标,链表存储判断哈希值,哈希值相同判断是否key相同,相同覆盖,不相同,增加最新的数据,同时在Entry内记录原来的数据。
- hashMap的最大长度为2的30次方。
arrayList源码
- 默认大小为10,触发扩容时机为达到当前容量
- 增添和删除基本时通过System.arraycopy方法,
- 扩容时使用的是Arrays.copyOf方法,创建新的Object[ ] ,然后将原来集合的数据赋值过去
- 每次扩容为当前容量的二进制右移一位,增加0.5倍,10->15->22
- 最大容量为2^31-1