【发布时间】:2014-09-12 04:47:09
【问题描述】:
可能重复
When should a class be Comparable and/or Comparator?
我了解此链接中给出的区别。
而且在我所指的书中,当我们需要根据多个字段对对象进行排序时,我们不能使用可比性。
我的问题:
我只是想要一个示例,我们不可能使用可比较并且必须使用比较器才能进行比较,并且还请说明为什么我们不能在对象的两个不同字段上进行比较。 如果您发现此问题重复,请提供链接,我搜索了很多问题,但没有一个我想要的示例。
【问题讨论】:
-
Comparator通常适用于比较广泛的对象,例如排序甚至过滤,并且并非所有对象都实现Comparable。Comparable是实例绑定的,您可能想要更改默认compare方法的工作方式,Comparator可以让这更简单......但这只是我 -
你总是可以让一个类 Comparable 而不是创建一个 Comparator——你是对的。 Comparable 更具限制性,因为 (a) 您必须控制类(即您不能从依赖项 Comparable 中创建类),并且 (b) 每个类只能实现一次 Comparable。
-
另外,我不知道书中的措辞是什么,但你绝对可以实现
Comparable,这样你就可以根据多个字段进行排序。你不能做的是让它以不止一种方式排序。也就是说,您可以说“总是按姓氏排序,然后是名字”,但不能在一种情况下说“按姓氏排序”,而在另一种情况下说“按名字排序”。为此,您需要Comparator。 -
正如我所提到的,在 cay S horstman 中,当我们必须基于多个字段比较对象时,我们不能使用可比较性。请提供一个代码来探索这个。
-
@yshavit 正如您在第二条评论中提到的那样,这是本书的确切措辞。请举例说明如果使用可比性以及比较器如何解决我们的问题,我们实际上会卡在哪里。跨度>
标签: java comparator comparable