hashmap详解

hashMap详解

hashMap也就是存放键值对(key-value)的java集合,每一个键值对叫做Enrty,这些个键值对存放于一个数组当中,这个数组就是hashmap的主干。

我们主要使用两个方法,put和get

put方法

比如hashMap.put("apple",0),

首先利用hash函数求解apple的hash值,比如求解出来是2,就把Enrty插入到位置为2的数组元素上

但是数组长度是有限的,所以当index冲突的时候怎么解决呢?使用链表解决这个问题,当冲突的时候将新插入的entry使用头插法插入到链表中

get方法

比如要hashMap.get("apple")

使用hash函数求解key=“apple”的值hash("apple"),可能出现hash冲突,这个时候就顺着链表一个一个查询,找hash值

 

hashmap的初始长度是多少

16

因为hashMap采用位移法来进行hash值的求解

因为hash函数是hash=hashCode(“key”)&(length-1)

16-1=15=1111

这样使用与的位运算hash值仅仅与hashcode的最后四位有关,所以是随机的

hashMap在高并发情况下可能会出现死锁


 

在高并发情况下,hashMap需要进行扩容也就是ReSize

发生Resize有个条件

hashMap.size>=capacity*loadFactor(默认是0.75)

hashMap主要做两件事:1.扩容2.ReHash(会出现链表环)

posted on 2018-02-04 17:08  张小泽的小号  阅读(117)  评论(0编辑  收藏  举报

导航