2016-08-23 100 views
-2

这个问题在采访中被问到。问题是为什么Strin g和其他包装类实现Comparable而不是Comparator接口。我试图解释Comparator基本上是提供自定义排序,Comparable是默认的自然排序顺序。同样从设计原理角度来看,Comparable紧密耦合且Comparator松散耦合。但是,我无法澄清为什么String实施了Comparable而不是Comparator为什么字符串实现可比较而不是比较器接口

+0

其他半副本:“[何时应该类是Comparable和/或Comparator?](https://stackoverflow.com/questions/1440134)”和“[compare()和compareTo( )?](https://stackoverflow.com/questions/420223)”。不幸的是,对于这个......没有规范的复制目标问题......只有少量的适度复制的相互复制。 –

回答

3

字符串执行器Comparable因为它们是可以比较的东西。一般来说,实现Comparable的东西往往具有自然顺序,就像你提到的那样。

A Comparator是一种比较事物的方式。当你创建一个比较器时,你正在定义一个用来比较事物的方法。你可以让一个给定类型的比较器以不同的方式进行比较。

+0

我上面提到了一些关于自然排序的内容。是的,但我认为我们可以通过重写compareTo()方法来轻松修改此顺序。我的意思是从实施到实施都有所不同。它不是特定于Comparable或Comparator。字符串是一个可变类,并以这种方式实现,它总是给你自然顺序排序。 – RoyalTiger

+0

您可以通过覆盖compareTo来修改排序,但对于实现Comparable的每个类,只能有一个定义的排序,因为您必须选择特定的方式来编写compareTo。但是,您可以使几个比较器比较特定类的对象,每个比较器可以定义不同的顺序。查看其他可比较的比较问题以获取更多信息。 – John