當我在看Java Object Ordering教程時,文章的最後一部分'比較器'讓我困惑了一下。排序集合的Java對象排序
通過定義類別Employee
,該類別本身可以通過員工姓名進行比較,本教程不會顯示該類是否已覆蓋equals
方法。然後它使用定製的Comparator
,其中員工按照資歷進行排序以對員工列表進行排序,並且我可以理解。
然後教程解釋了爲什麼這將不作爲一個TreeSet
收集整理等(一個SortedSet
)工作,其原因是:
它產生的順序不是與equals兼容。這意味着這個比較器等同於equals方法沒有的對象。特別是,同一天僱用的任何兩名僱員將相當於平等。當你對一個List進行排序時,這並不重要;但是當您使用比較器來訂購已排序的集合時,這是致命的。如果使用此比較器將同一日期僱用的多個僱員插入到TreeSet中,則只會將第一個僱員添加到該集合中;第二個將被視爲重複的元素,將被忽略。
現在我很困惑,因爲我知道List
允許重複的元素,同時Set
不基於equals
方法。所以我想知道教程何時說由Comparator
生成的順序與等號不兼容,這是什麼意思?而且它還說'如果您使用此比較器將同一日期僱用的多個員工插入到TreeSet中,則只會將第一個員工添加到該集合中;第二個將被視爲重複的元素,將被忽略。「我不明白如何使用Comparator
將影響使用原始equals
方法。我認爲我的問題是如何使用compare
和方法生產和分類TreeSet
。
謝謝!現在我明白這是爲了保持它與'Set'接口的一致性,並且我看到了使用'equals()'方法的'contains()'方法。 –