Jdk7和Jdk8版本对比
a.底层数据结构
Jdk7 | Jdk8 |
---|---|
数组+链表 | 数组+链表+红黑树 |
b.存储原理
Jdk7 | Jdk8 |
---|---|
当数组长度超过一定阈值的时候,会转存为链表(头插法) | 当数组长度超过一定阈值的时候,会转存为链表,当链表长度超过一定阈值时,会转为红黑树(尾插法) |
头插法:新增节点总是插在头部,实现简单,但是插入的数据与将来读取的顺序是相反的,并发情况下可能会形成链表,最终导致死锁 (HashMap本身线程不安全)
尾插法:新增节点总是插在尾部 实现相对复杂,但是插入数据的顺序与读取顺序是一致的
c.数组的定义
Jdk7 | Jdk8 |
---|---|
Entry<> | Bucket<> TreeNode<> |
效率说明:当链表长度超过8的时候,会转存为红黑树 可以提高查询效率