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 出于某种原因不使用 equalshashCode 来比较元素时。最常见的例子是带有自定义 TreeSetComparator 。例如,我们可以有这样的事情:

Set<String> a = new TreeSet<>();
Set<String> b = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
ab 的并集、交集等未定义,因为 ab 元素之间定义了不同的等价关系。

Java SE 在谈论与 equals 不一致的排序时也提到了这种情况(请参阅 TreeSet ):

关于java - Guava JavaDocs 中基于不同 "equivalence relations"的集合是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49523153/

10-09 05:08