Sets.SetView.union()
的 Guava JavaDocs(以及 intersection()
、 difference()
和 symmetricDifference()
)提到了“等价关系”:
我很难理解这句话的意思。
词汇表 defines "equivalence relation" 为 reflexive(“a.relation(a)
始终为 true
”)、symmetric(a1.relation(a2) == a2.relation(a1)
)和 transitive(a1.relation(a2) && a2.relation(a3)
意味着 a1.relation(a3)
) - 并指代 Object.equals()
' docs 。 (不幸的是,Guava wiki 没有详细说明......
但是不同类型的 Set
在这方面有何不同(即等价关系)?他们似乎都继承了 equals()
from AbstractSet
?它与集合保存的对象类型无关(例如 Set<Cow>
与 Set<Chicken>
),是吗?
最佳答案
听起来他们指的是当 Set
出于某种原因不使用 equals
和 hashCode
来比较元素时。最常见的例子是带有自定义 TreeSet
的 Comparator
。例如,我们可以有这样的事情:
Set<String> a = new TreeSet<>();
Set<String> b = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
a
和 b
的并集、交集等未定义,因为 a
和 b
元素之间定义了不同的等价关系。Java SE 在谈论与
equals
不一致的排序时也提到了这种情况(请参阅 TreeSet
):关于java - Guava JavaDocs 中基于不同 "equivalence relations"的集合是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49523153/