哪里需要在java集合中使用collections.sort()和comparable与comparator接口?
通过一些文章,我对收藏有了一些了解。哪里需要在java集合中使用collections.sort()和comparable与comparator接口?,java,collections,Java,Collections,通过一些文章,我对收藏有了一些了解。 但是我弄不清楚应该在哪里实现collections.sort()方法,以及哪里需要使用comparable接口(compareTo()和comparator接口(compare()) 用于比较此参考对象和另一参考对象的可比接口,但用于比较两个对象的比较器 我想知道具体哪种情况需要使用方法 谢谢,当我无法访问要比较的类的代码时,Comparator对我来说是有意义的:例如,您可能需要为String实现一个自定义的Comparator 当我需要对自己的自定义对象
但是我弄不清楚应该在哪里实现collections.sort()方法,以及哪里需要使用comparable接口(compareTo()和comparator接口(compare()) 用于比较此参考对象和另一参考对象的可比接口,但用于比较两个对象的比较器 我想知道具体哪种情况需要使用方法
谢谢,当我无法访问要比较的类的代码时,Comparator对我来说是有意义的:例如,您可能需要为String实现一个自定义的Comparator
当我需要对自己的自定义对象列表进行排序时,我编写它们是为了实现接口Compariable。您不应该实现
集合。sort()
;此方法为。调用该方法时,如果可比较,则不提供比较器
按自然顺序进行排序。否则,提供比较器
对比较器
进行排序
您应该让类实现Comparable
,如果类具有自然顺序,则应提供compareTo
方法,如javadocs中所示。例如Integer
和Double
,它们当然具有自然的数学顺序
您应该创建一个类,当您无法使对象的类进行排序比较时,或者当您想要呈现一个替代自然排序的排序时,或者当您想要在没有自然排序的情况下强加一个排序时,应该实现该类。例如,反转自然排序(例如,从大到小按降序排序)。另一个例子是具有多个字段的数据对象,您希望在多个字段上进行排序,例如,具有名字和姓氏的Person
对象:您可以有一个比较器
,该比较器首先对姓氏进行排序,另一个比较器首先对姓氏进行排序。L让我们看看我是否能用简单的话来解释:
compareTo()
方法用于将对象的活动实例与对象的另一个实例进行比较
public class Spam implements Comparable<Spam> {
private int eggs;
public Spam(int eggs) {
this.eggs = eggs;
}
public int compareTo(Spam otherSpam) {
return otherSpam.eggs - this.eggs;
}
public int getEggs() {
return eggs;
}
}
因此,compareTo()
用于确定一个类的两个实例是否相等,如果不相等,则确定哪个实例更大
这对于排序算法的重要性现在已经很明显了。如果不知道一个对象是否比另一个对象大,您将如何对对象集合进行排序?当调用sort
的实现时,它使用类的compareTo()
方法来确定集合的正确顺序
最后,当您希望在类外执行比较时,可以使用compare()
方法
public int compare(Spam s1, Spam s2) {
return s1.getEggs() - s2.getEggs();
}
希望这对您有所帮助我猜Comparator仅在您希望按升序对类中的对象进行排序时使用。用于按升序对类的ID进行排序。基于一个字段的排序是互斥的,自动排除基于另一个字段的排序如果类具有自然顺序,请将其与使用compareTo方法实现该顺序。排序时,如果要对不可比数据进行排序,或需要按可比类型的自然顺序以外的顺序进行排序,请使用Comparator。
public int compare(Spam s1, Spam s2) {
return s1.getEggs() - s2.getEggs();
}