Nixo Home

HashMap个人理解

字数统计: 290阅读时长: 1 min
2019/07/07 Share

HashMap是由数组和链表组成,通过get/put以键值对的形式进行读取和存储,存储时通过HashMap的hash方法将key进行hash计算key的hashcode上16位异或下16位计算,这样计算性能上的开销比较低,而且不容易发生碰撞,得出hash值在通过数组的长度,计算出数组下角标,当我们存入时会发生几种情况,第一种是hashMap中没有存储过该hash值得数据,我们就直接插入,如果数组中存在该hash值得数据,我们将通过equals方法进行内容比对,如果返回true,我们将value覆盖,如果返回false,我们则插入在链表当1.7之前是头插法,1。7之后改为尾插法中,数组每一项都存放一个桶,如果桶内的链表大于8也就是同一hash值碰撞次数大于8这时hashmap将会将链表转为红黑树,当数组超过一定大小的时候,hashMap会调用resize方法进行扩容,每一次都扩大为原来的2倍。扩容时会带来性能上的开销。

CATALOG