HasdMap
hasdMap
存取无序,键是唯一 (键的唯一是根据hashCode和equals两个方法的配合使用,如果键的位置要存的是自定义的类型,那么自定义的类型就一定要重写hashCode和equals方法)
JDK 1.7
底层是 entry数组加链表
Map的 key 是无序不可重复的 可以为null value 可以重复 可以为null ,key的值为null,这个null会存在下标为0 的位置,如果有多个null,会替换value
Map 的key 是根据哈希和当前数组的长度计算出来的,所以它是无序的,如果key值相等,会做equals判断,如果相同则覆盖保存
默认初始化容量:16 hashMap的扩容是按2 的N次方创建 因为2的幂次方再进行位运算的时候是最快的
初始化长度:0
加载因子: 0.75
扩容阈值 :容量*加载因子 扩容时机是先判断是否打到阈值,达到再扩容,再添加元素,并且采用的头插法,也就是旧元素挂在新元素的下面
扩容条件有两个 既存储个数大于12 并且出现了哈希冲突,满足这两个条件才会扩容
扩容大小,原有长度的两倍,扩容之后会把原来所有的值重新计算哈希值
假设hashMap的初始长度是16 那么下次必定扩容是什么时候? 要满足上面两个条件?
数组在hash不冲突的情况下共可以存储16个,链表可以存储11个 (扩容条件是既要满足阈值(超过12个)也要存在哈希冲突)当前12个值都存在一个链表上的时候并不满足超过12个的阈值条件所有不会扩容,再当接下来的15个都保存到了数组里,也不会存在哈希冲突,所以答案是12加15,最多可以存储是27 个,超过27个的时候hashMap会扩容
JDK 1.8