有什么好的建议如何处理存储在集合中的可变对象?
一些对象可以根据它们的内部状态定义它们的相等性(和 hashCode)。当这些对象存储在集合中,在受控代码之内或之外时,状态的突变可能会导致集合中的不一致。
除了不这样做之外,是否有任何“最佳实践”来避免或处理它?
示例代码:
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);
}