diff --git "a/file/\344\272\214\343\200\201\351\233\206\345\220\210\346\241\206\346\236\266.md" "b/file/\344\272\214\343\200\201\351\233\206\345\220\210\346\241\206\346\236\266.md" index 19c5768..4d32b3b 100644 --- "a/file/\344\272\214\343\200\201\351\233\206\345\220\210\346\241\206\346\236\266.md" +++ "b/file/\344\272\214\343\200\201\351\233\206\345\220\210\346\241\206\346\236\266.md" @@ -68,8 +68,11 @@ - 删除引起的不平衡: 最坏情况下,平衡二叉树需要维护从被删node到root这条路径上所有node的平衡性,因此需要旋转的量级是O(logN)此,而红黑树最多只需3次旋转,只需要O(1)的复杂度。 - - **5、JDK1.8中HashMap的插入源码分析** + **6、HashMap为什么要树化?** + + - 本质上这是个安全问题。因为在元素放置过程中,如果一个对象哈希冲突,都被放置到同一个桶里,则会形成一个链表,我们知道链表查询是线性的,会严重影响存取的性能。而在现实世界,构造哈希冲突的数据并不是非常复杂的事情,恶意代码就可以利用这些数据大量与服务器端交互,导致服务器端CPU大量占用,这就构成了哈希碰撞拒绝服务攻击,国内一线互联网公司就发生过类似攻击事件。 + + **7、JDK1.8中HashMap的插入源码分析** ```java /** @@ -493,4 +496,4 @@ ## 6、总结 -最主要的核心还是 **==Lambda== 表达式**和 **==Stream API==** \ No newline at end of file +最主要的核心还是 **==Lambda== 表达式**和 **==Stream API==**