gpt4 book ai didi

java - Guava ImmutableMap 中的性能警告

转载 作者:行者123 更新时间:2023-11-29 07:09:31 36 4
gpt4 key购买 nike

在 Guava 的 ImmutableMap 的 javadocs 中说:

Performance notes: unlike HashMap, ImmutableMap is not optimized for element types that have slow Object.equals(java.lang.Object) or Object.hashCode() implementations. You can get better performance by having your element type cache its own hash codes, and by making use of the cached values to short-circuit a slow equals algorithm.

所以我的第一个问题是我如何知道我的元素是否有缓慢的 .equals 或 .hashCode 实现?在我的特定实例中,我使用 java Enum 作为我的 key ,因此它具有 .equals 和 .hashCode 的高效默认实现,对吗? (我假设这些值的实现是无关紧要的,只要您不使用值的值访问 map 。)

我的第二个问题是“让你的元素类型缓存它自己的哈希码”到底是什么意思!谷歌搜索我似乎无法找到你如何做到这一点的例子。我想也许这意味着您最终会在哈希码中得到哈希码?所以我进入哈希码桶,然后 .equals 方法在其中使用第二组哈希码?

最佳答案

I'm using a java Enum as my key, so that has an efficient default implementation of .equals and .hashCode, right?

equals 或 hashcode 都没有被覆盖,因此它几乎不会更快(即 equals 返回 this == other)。

My second question is what does "having your element type cache its own hash codes" even mean!

您可以使用类似下面的代码来避免多次计算 - 如果您这样做,您需要确保:

  • 哈希码是不变的(即在实例的整个生命周期中不能改变)
  • 您的 hashcode 方法是线程安全的(这可以通过使用局部变量来完成,或者更简单地通过使 hash 易变)。
class MyClass {
private int hash;

public int hashcode() {
int hash = this.hash;
if (hash == 0) {
hash = calculateIt();
this.hash = hash;
}
return hash;
}
}

关于java - Guava ImmutableMap 中的性能警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15454812/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com