假设三个对象a,b,c与
a == a, b == b, c == c (reflexive)a == b, b == ab == c, c == ba != c, c != a
(伪代码,
x == y代表
x.equals(y))。
现在,让我们将对象添加到集合中:
Set s = new HashSet(); // Set implementation doesn't matters.add(b); // s = [b]s.add(a); // s doesn't change, because a == bs.add(c); // s doesn't change, because c == b
相反,如果我们以不同的顺序添加它们:
Set s = new HashSet();s.add(a); // s = [a]s.add(b); // s doesn't change, because b == as.add(c); // s = [a,c], because c != a
这显然是违反直觉的,并且与人们期望的行为不匹配。例如,这意味着两个集合的并集(即s
after的状态
s.addAll(someOtherSet))可能取决于someOtherSet的实现(元素的顺序)。



