从Java8开始,我们心爱的HashMap
表现得有点不同。
如果密钥实现了类似的接口,则每个散列将包含一个平衡树而不是链接列表。
这可以减少从O(n)
到O(log(n))
发生碰撞时的最差时间复杂性,请参阅JEP180
是否存在从Java7升级到Java8会导致HashMap
性能下降的情况?
答案 0 :(得分:2)
Java8将在>中使用桶中条目数量的平衡树。 N,其中N被选择empirically,并且如果该数字是< 3,则再次使用列表。 K.如果桶中的条目数量经常发生“treefyng / untreeifying”的话,我会期望性能更差。这可能是由于特定的哈希函数而发生的。
此外,我不确定创建和查询树的开销是否值得小N的利润。