gpt4 book ai didi

java - 如何生成集合的哈希以确保完整性?

转载 作者:行者123 更新时间:2023-12-04 17:22:02 25 4
gpt4 key购买 nike

也许这个问题之前有人问过(我没找到)...

我有一个 aprox 的 java.util.Set。 50000 个字符串。我想生成某种散列来检查它是否已更改(比较 Set 的两个版本的散列)?

如果 Set 发生变化,则哈希必须不同。

如何实现?谢谢!

编辑:
对不起,误导性的措辞。我不想检查“它”是否已更改(同一实例)。相反,我想检查两个数据库查询是否生成两个(可能相同)一组字符串的实例。

最佳答案

我会尝试使用 java.util.AbstractSethashCode 方法,如文档中所述:

Returns the hash code value for this set. The hash code of a set is defined to be the sum of the hash codes of the elements in the set, where the hash code of a null element is defined to be zero. This ensures that s1.equals(s2) implies that s1.hashCode()==s2.hashCode() for any two sets s1 and s2, as required by the general contract of Object.hashCode().

当然,这仅在您的 Set 实现从 AbstractSet 扩展时有效,我想您使用例如java.util.HashSet一如既往地存在哈希冲突的可能性。

或者,您可以扩展现有的 Set 实现并覆盖状态更改方法,如果每个对象的哈希计算变得过于昂贵,这可能有意义,例如:

class ChangeSet<E> extends java.util.HashSet<E> {
private boolean changed = false;

@Override
public boolean add(E e) {
changed = true;
super.add(e);
}

public void commit() {
changed = false;
}

public boolean isChanged() {
return changed;
}

/* and all the other methods (addAll, remove, removeAll, etc.) */

}

关于java - 如何生成集合的哈希以确保完整性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8723564/

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