当我在看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()'方法。 –