Sets に保存されている変更可能なオブジェクトを処理する方法について何か良いアドバイスはありますか?
一部のオブジェクトは、内部状態に基づいて等価 (および hashCode) を定義する場合があります。このようなオブジェクトが Set に格納されている場合、制御されたコードの内外で、状態の変化によって Set の不整合が生じる可能性があります。
それを回避または対処するための「ベストプラクティス」はありますか?
コード例:
static class A {
String s;
public boolean equals(Object o) {
return s.equals(((A)o).s);
}
public int hashCode() {
return s.hashCode();
}
public String toString() {
return s;
}
}
public static void main(String[] args) {
A a0 = new A();
a0.s = "Hello";
A a1 = new A();
a1.s = "World";
HashSet<A> set = new HashSet<A>();
set.add(a0);
set.add(a1);
System.out.println(set);
a0.s = "World";
System.out.println(set);
}