JDK HashMap

2018/06/02 JDK HashMap

JDK HashMap 知识要点

  • 数组 + 链表 + 红黑树(JDK 8)
  • JDK 7 并发扩容时CPU占用高问题
  • capacity, default table length 16
  • 链表长度超过8时转红黑树
  • 扩容阀值threshold = table length * load factor,kv健值对个数超过阀值时开始扩容
  • table数组位置定位
(h = k.hashCode()) ^ (h >>> 16) & (table.length -1)

在JDK1.8的实现中,优化了高位运算的算法,通过hashCode()的高16位异或低16位实现的:(h = k.hashCode()) ^ (h >>> 16),主要是从速度、功效、质量来考虑的,这么做可以在数组table的length比较小的时候,也能保证考虑到高低Bit都参与到Hash的计算中,同时不会有太大的开销。
  • JDK7扩容时链表中节点位置会反转,JDK8不会(死循环,cpu高的原因)

Search

    Table of Contents