与1.7对比

  1. 数据结构:1.7是hash数组 + 链表;1.8采用hash数组 + 链表 + 红黑树;
  2. 数据插入:1.7头插法;1.8尾插法;
  3. 扩容后数据分布方式:1.7是对所有key重新hash(key的hash值的二进制 & length-1的二进制);1.8是原位置或者(原位置+oldlen)

四个关键常量(扩容&链表转红黑树)

jdk1.8 hashmap

  • DEFAULT_LOAD_FACTOR 扩容因子

threshold = table长度 * 扩容因子jdk1.8 hashmap

  • TREEIFY_THRESHOLD & MIN_TREEIFY_CAPACITY 控制链表转红黑树

链表转红黑树的两个条件jdk1.8 hashmapjdk1.8 hashmap

  • UNTREEIFY_THRESHOLD 控制红黑树转链表

jdk1.8 hashmap

头插法和尾插法对比

  • 头插法会导致链表逆序&死循环(引用网络图)
    jdk1.8 hashmap
    jdk1.8 hashmap
    jdk1.8 hashmap
    jdk1.8 hashmap

扩容后hash计算方法

相关文章:

  • 2021-09-29
  • 2022-12-23
  • 2022-12-23
  • 2021-06-14
  • 2021-09-16
  • 2021-04-13
猜你喜欢
  • 2021-11-27
  • 2021-08-29
  • 2022-02-12
  • 2021-12-04
  • 2022-12-23
相关资源
相似解决方案