値を格納するのにHashSet<String>
を使用していますが、一部のStringは同じハッシュコードを持っています。 HashSetが衝突をどのように処理するか。Java HashSet <String>オブジェクトの衝突
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に保存しているうちに、一部のデータが失われました。"もっときれいにしてください。ハッシュコードの衝突*はデータを失わないことに注意してください - 値を見つけるのが少し効率が悪くなるだけです。あなたの質問が現時点で不明なので、[mcve]を提供してください。 –
(おそらく 'retainAll'、btwを使いたいだけです) –
これをチェックしてください:https://stackoverflow.com/questions/2851938/efficiently-finding-the-intersection-of-a-variable-number-of-文字列の集合 –