Java 为什么可以';我们不是在每种情况下都只使用可比的吗?

Java 为什么可以';我们不是在每种情况下都只使用可比的吗?,java,comparator,comparable,Java,Comparator,Comparable,可能重复的 我理解此链接中给出的差异。 我所指的书中也提到,当我们需要基于多个字段对对象进行排序时,我们不能使用comparable 我的问题: 我只想举一个例子,我们不可能使用comparable,为了比较,我们必须使用comparator,同时请说明,使用comparable,我们为什么不能在两个不同的对象字段上进行比较。 如果你发现这个问题是重复的,请提供链接,我已经搜索了很多问题,但没有一个有我想要的例子 将苹果相互比较,会得到相等的苹果类别,如红色的、绿色的、老的和新鲜的。只要你只对

可能重复的

我理解此链接中给出的差异。
我所指的书中也提到,当我们需要基于多个字段对对象进行排序时,我们不能使用comparable

我的问题:

我只想举一个例子,我们不可能使用comparable,为了比较,我们必须使用comparator,同时请说明,使用comparable,我们为什么不能在两个不同的对象字段上进行比较。
如果你发现这个问题是重复的,请提供链接,我已经搜索了很多问题,但没有一个有我想要的例子

将苹果相互比较,会得到相等的苹果类别,如红色的、绿色的、老的和新鲜的。只要你只对一个相当广泛的平等感兴趣就可以了。但是,如果你将要收到一份薪水,你会非常高兴你在平等阶层中是可识别的。
因此compareto有利于排序和聚类,equals/hashcode用于识别。

如果类实现了
Comparable
,则这定义了通常认为it元素的自然顺序。在某些情况下,这是唯一有意义的排序,在其他情况下,这可能是使用最广泛的排序。例如,如果你看数字,可能只有一个(总的)顺序是有意义的(除了可能采取相反的顺序)。正如其他人已经指出的,它们是具有其他有用顺序的其他对象。是什么使主订单(或者如果有)取决于您的应用程序。如果您在应用程序中管理具有地址的人员,则电话簿排序顺序可以被视为自然顺序(如果这是最广泛使用的顺序),按年龄排序可能是次要顺序。轻微OT:注意非相等对象被视为与排序相等的情况,这可能会导致容器出现问题,如
OrderedList
等。

Comparable
主要用于存在“已知”默认排序顺序,并且我们正在排序的对象或类是可编辑的或由进行更改的开发人员拥有的情况


Comparator
适用于正在订购的类或对象不属于进行更改的开发人员的情况,就像web服务响应一样。当自然排序不符合需要完成的目标时,也最好使用比较器。

比较器通常适用于比较范围广泛的对象,例如排序甚至过滤,并且并非所有对象都实现了
可比性
Comparable
是实例绑定的,您可能希望更改默认的
compare
方法的工作方式,
Comparator
可以简化此过程……但这只是我的问题,您可以始终使类具有可比性,而不是创建一个Comparator——这是正确的。Compariable更具限制性,因为(a)您必须控制类(即您不能使依赖项中的类具有可比性),以及(b)每个类只能实现一次Compariable。此外,我不知道书中的措辞是什么,但是,您肯定可以实现
compariable
,这样您就可以根据多个字段进行排序。你不能让它以多种方式排序。也就是说,您可以说“总是按姓排序,然后按名排序”,但不能在一种情况下说“按姓排序”,在另一种情况下说“按名排序”。为此,您需要一个
比较器
。如我所述,在cay S horstman中,当我们必须基于多个字段比较对象时,我们不能使用comparable。请给出一个代码来探索这一点。@yshavit正如您在第二篇评论中提到的,这是本书的确切措辞。请给出一个示例,说明如果使用comparable,我们实际遇到了什么困难,以及comparator如何解决我们的问题。