gpt4 book ai didi

java - 通过哈希比较 java 映射

转载 作者:行者123 更新时间:2023-12-01 07:39:39 25 4
gpt4 key购买 nike

我想通过一个简单的哈希比较两个Java Map

每个对象都位于不同的计算机上,因此通过网络发送哈希值比发送整个对象进行比较要便宜。

例如,我有两个ExampleClass的HashMap

Map<String,ExampleClass> One=new ...;

Map<String,ExampleClass> Other=new ...;

我不需要确保所有元素都相等我相信哈希值就足够了。

我打算在每一侧进行迭代并创建一个“自制哈希”,然后将其发送到网络以最终进行比较,例如 int 或其他内容。

如果每次在集合中添加或删除对象时都计算这个“哈希”,那就太好了,这样我就不用迭代整个对象了。我必须封装 Map 的每个添加/删除操作。有没有一个 Java 库可以做到这一点?

最佳答案

如果您的所有类都实现 hashCode() (不使用 "default" memory address hashcode ),您可以使用 map's hashCode() .

这里需要注意的是,如果您的 ExampleClass 没有实现 hashCode(),那么相同的项可能在两台不同的机器上具有不同的哈希值,这将导致不同的结果 map 的哈希值。

<小时/>

澄清一下:

Map 实现一个 hashCode(),它被定义为其 Map.Enytry总和 hashCode()s。

Map.Entry's hashCode()被定义为键的 hashCode() 和值的 hashCode()异或。您的键是String——它们有一个明确定义的hashCode()(两个相等的字符串始终具有相同的hashCode())。您的值是 ExampleClass 实例 - 它们还需要一个明确定义的 hashCode()

总之,包含 { s1 -> ec1, s2 -> ec2 } 的映射的哈希码将等于:

(s1.hashCode() ^ ec1.hashCode()) + (s2.hashCode() ^ ec2.hashCode())

这意味着它取决于ExampleClasshashCode()

如果 ExampleClass 确实以相同的 ExampleClasse 提供相同的 hashCode() 的方式实现了 hashCode() s,一切都会顺利进行。如果ExampleClass没有实现hashCode(),它将使用ObjecthashCode(),这几乎总是给你不同的hashCodes()

关于java - 通过哈希比较 java 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768028/

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