【发布时间】:2017-10-29 13:29:22
【问题描述】:
我使用HashSet<String> 来存储值,但某些字符串具有相同的哈希码。 HashSet 如何处理冲突。
List<ClassA> getValuesFromA(){
}
List<ClassA> getValuesFromB(){
}
Set <String> a = new HashSet<String>(getValuesFromA()); // data overwritten due to hash code collision
Set <String> b = new HashSet<String>(getValuesFromB()); // data overwritten due to hash code collision
a.removeAll(b);
a.stream().forEach(t -> t.setSomeValue(X));
b.addAll(a);
我正在使用 HashSet 为每个元素在 O(1) 中找到负 b,然后找到 b + (a - b)。但是在 HashSet 中存储数据时,一些数据会被覆盖。有没有人知道在不更改哈希方法或数据结构的情况下执行此操作?
【问题讨论】:
-
"但是在 HashSet 中存储数据时,我丢失了一些数据。"请清楚得多。请注意,哈希码冲突不会丢失数据 - 它们只会稍微降低查找值的效率。请提供minimal reproducible example,因为您的问题目前尚不清楚。
-
(你可能只想使用
retainAll,顺便说一句。)
标签: java collections hashset