从 Java8 开始,我们钟爱的 HashMap
的行为有点不同。
如果 key 实现了一个可比较的接口(interface),每个散列将包含一个平衡树而不是链表。
这将冲突情况下的最坏时间复杂度从 O(n)
降低到 O(log(n))
,参见 JEP180
是否存在从 Java7 升级到 Java8 会导致 HashMap
性能下降的情况?
最佳答案
Java8 将在 > N 的桶中的条目数中使用平衡树,其中选择 N empirically ,如果该数字 < K,则再次使用列表。如果存储桶中的条目数量以“treefyng/untreeifying”经常发生的方式变化,我预计性能会更差。这可能是由于特定的哈希函数而发生的。
我也不确定创建和查询树的开销是否值得小 N 的利润。
关于java - 是否存在 Java 7's Hashmap implementation is preferred to Java8' s 实现的场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40884723/