参考视频:剖析HashMap源码

1、 图解数据结构【有图有真相】

剖析HashMap结构

剖析HashMap结构

HaspMap数据结构是:数组 + 链表
剖析HashMap结构
在jdk1.8之后为了解决HashMap链表过程,导致遍历产生的时间过长,引入了红黑树进行了进一步优化。
剖析HashMap结构

总结:

  1. hashmap的数据结构包括了初始数组、链表、红黑树;
  2. 插入数据的时候使用pos = key % size 来进行插入数据;
  3. 当两个或者两个以上的key的相同就会发生冲突,就会挂在数组初始位置的链表后;
  4. 当某个节点后出现过多的链表节点的时候,就会转换成红黑树以提高效率。
  5. 数组容量2的倍数:
    1)提高运算速度;
    2)增加散列度,降低冲突;
    3)减少内存碎片。
  6. hash函数与pos定位:hashcode的高16位与低16位进行异或求模,增加了散列度,降低了冲突。
  7. 插入冲突:通过单链表解决冲突,如果链表长度超过(TREEIFY_THRESHOLD = 8),进行单链表和红黑树的转换以提高查询速度。
  8. 扩容:
    1)扩容的条件:实际节点数大于等于容量的四分之三;
    2)扩容后数据排布:要么是原下标的位置,要么是原下标 + 原容量的位置
  9. 序列化:只存储了数组的容量、实际节点数量和各个节点的key、value值。

相关文章:

  • 2021-07-30
  • 2022-12-23
  • 2021-11-05
  • 2022-12-23
猜你喜欢
  • 2021-07-04
  • 2021-07-17
  • 2021-09-08
  • 2022-12-23
  • 2021-10-27
  • 2021-10-25
  • 2021-06-18
相关资源
相似解决方案