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(会出现链表环)