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

    

 
posted @ 2021-03-13 09:16  余一洋  阅读(76)  评论(0编辑  收藏  举报