目录

 

hashmap的工作原理

Java7中HashMap的结构   

Java8中HashMap的结构

引申

引申1:hashMap添加对象为什么要同时重写hashcode和equals方法?

引申2:为什么HashMap中链表长度超过8会转成红黑树,长度低于6会还原成链表


hashmap的工作原理

通过hash的方法,通过put和get存储和获取对象。存储对象时,我们将key传给put方法时,它调用hashCode计算hash从而得到储存的数组下标位置,进一步存储,HashMap会根据当前数组的占用情况自动调整容量(超过域值时则resize为原来的2倍)。获取对象时,我们将key传给get方法,它调用hashCode计算hash从而得到数组下标位置,并进一步调用equals()方法确定键值对。如果发生冲突的时候,Hashmap通过链表将产生碰撞冲突的元素组织起来,在Java 8中,如果一个数组中碰撞冲突的元素超过某个限制(默认是8),则使用红黑树来替换链表,从而提高速度。
 

Java7中HashMap的结构   

java7中HashMap的结构由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希碰撞而存在的。

   每一个绿色的方格都是一个Entry的实体,Entry 包含四个属性:key, value, hash 值和用于单向链表的 next。

HashMap的架构原理

所以java7HashMap的结构如下:

HashMap的架构原理

如果定位到的数组位置不含链表(当前entry的next指向null):那么对于查找,添加等操作很快,仅需一次寻址即可;

如果定位到的数组包含链表:对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找(引申1:hashMap添加对象为什么要同时重写hashcode和equals方法?)。

所以,性能考虑,HashMap中的链表出现越少,性能才会越好。

Java8中HashMap的结构

java8中HashMap的结构是:数组+链表+红黑树

java7中根据 hash 值,能够快速定位到数组的具体下标,如果定位到的数组包含链表:对于添加操作,其时间复杂度为O(n)为了降低这部分的开销,在 Java8 中,当链表中的元素超过了 8 个以后,会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。移除时,若桶中元素小于等于6时,红黑树结构还原成链表形式。引申2:为什么HashMap中链表长度超过8会转换成红黑树

HashMap的架构原理

 

引申

引申1:hashMap添加对象为什么要同时重写hashcode和equals方法?

原因:两个对象equals相等,则它们的hashcode必须相等,反之则不一定

equals()方法只比较两个对象是否相同,相当于==,而不同的对象hashCode()肯定是不同。

一般先写hashCode再写equals。因为它返回的是对象的哈希值,那么不同的new出不同的对象,他们虽然名字一样但是哈希码可能会不一样

参考:https://blog.csdn.net/u014590757/article/details/79501332

           https://blog.csdn.net/xl_1803/article/details/80445481

引申2:为什么HashMap中链表长度超过8会转成红黑树,长度低于6会还原成链表

原因:

  红黑树的平均查找长度是log(n),长度为8,查找长度为log(8)=3,链表的平均查找长度为n/2,当长度为8时,平均查找长度为8/2=4,这才有转换成树的必要;链表长度如果是小于等于6,6/2=3,虽然速度也很快的,但是转化为树结构和生成树的时间并不会太短。

还有选择6和8的原因是:

  中间有个差值7可以防止链表和树之间频繁的转换。假设一下,如果设计成链表个数超过8则链表转换成树结构,链表个数小于8则树结构转换成链表,如果一个HashMap不停的插入、删除元素,链表个数在8左右徘徊,就会频繁的发生树转链表、链表转树,效率会很低。

参考:https://blog.csdn.net/world6/article/details/70053356

相关文章:

  • 2021-10-27
  • 2021-10-29
  • 2022-01-14
  • 2021-11-02
猜你喜欢
  • 2021-11-16
  • 2021-11-17
  • 2022-12-23
  • 2022-12-23
  • 2021-10-25
  • 2021-11-04
相关资源
相似解决方案