gpt4 book ai didi

java - 为什么 Guava Sets::hashCode Impl 有一个带有双补码的奇怪循环更新?

转载 作者:行者123 更新时间:2023-12-05 03:26:45 28 4
gpt4 key购买 nike

Guava 像这样计算集合的哈希码:

static int hashCodeImpl(Set<?> s) {
int hashCode = 0;

for(Iterator var2 = s.iterator(); var2.hasNext(); hashCode = ~(~hashCode)) {
Object o = var2.next();
hashCode += o != null ? o.hashCode() : 0;
}

return hashCode;
}

这是高效而优雅的——我们使用交换运算(加法)来“混合”对象的哈希码,这样无论我们迭代元素的顺序如何,我们都可以获得相同的值。

我不确定的是 for 循环中的更新条件:hashCode = ~(~hashCode) 似乎没有效果(IntelliJ 的代码检查器建议简化表达式然后删除自赋值)。

这是怎么回事?

最佳答案

虽然还是有点神秘,the latest source code解释它(由 86aa9f0 介绍):

hashCode = ~~hashCode;
// Needed to deal with unusual integer overflow in GWT.

关于java - 为什么 Guava Sets::hashCode Impl 有一个带有双补码的奇怪循环更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71663405/

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