JDK1.8引入红黑树是为了解决哈希冲突严重时查找性能退化的问题。
JDK1.7及之前,HashMap用链表处理冲突,一旦冲突多了,链表变长,查找复杂度从O(1)退化成O(n)。更严重的是,攻击者可以故意构造大量哈希冲突的key,让HashMap变成一条超长链表,查询直接卡死,这就是所谓的哈希碰撞攻击。
JDK1.8的做法是:正常情况还是链表,但链表长度达到8且数组长度达到64时,自动转成红黑树,查找复杂度降到O(logn)。反过来,红黑树节点数降到6以下时,又退化回链表。
JDK1.8引入红黑树是为了解决哈希冲突严重时查找性能退化的问题。
JDK1.7及之前,HashMap用链表处理冲突,一旦冲突多了,链表变长,查找复杂度从O(1)退化成O(n)。更严重的是,攻击者可以故意构造大量哈希冲突的key,让HashMap变成一条超长链表,查询直接卡死,这就是所谓的哈希碰撞攻击。
JDK1.8的做法是:正常情况还是链表,但链表长度达到8且数组长度达到64时,自动转成红黑树,查找复杂度降到O(logn)。反过来,红黑树节点数降到6以下时,又退化回链表。
输入,输出,复盘,重复。
文章总数
12
本文阅读
0