a |= b 等同于 a = a|b逐行分析
取余(%)操作 : 如果除数是2的幂次则等价于与其除数减一的与(&)操作.这也就表明了为什么一定要求cap要为2的幂次方.再来看看table的index的计算规则:
在JDK1.7及从前的版本中,HashMap里是没有红黑树的实现的,在JDK1.8中加入了红黑树是为了防止哈希表碰撞攻击,当链表链长度为8时,及时转成红黑树,提高map的效率如果某个桶中的记录过大的话(当前是TREEIFY_THRESHOLD = 8),HashMap会动态的使用一个专门的treemap实现来更换掉它。这样做的结果会更好,是O(logn),而不是糟糕的O(n)。它是怎样工作的?
设重新计算存储位置后不变,即扩容前 = 1->2->3,扩容后 = 3->2->1此时若并发实行 put 操作,一旦出现扩容环境,则 容易出现 环形链表,从而在获取数据、遍历链表时 形成死循环(Infinite Loop),即死锁
作者:JavaEdge.
原文链接:https://blog.csdn.net/qq_33589510/article/details/120184298
欢迎光临 创意电子 (https://wxcydz.cc/) | Powered by Discuz! X3.4 |