在可比较的情况下,只能在比较器中创建一个排序序列,可以创建许多排序序列。什么是排序顺序在这里意味着什么。
答案 0 :(得分:6)
基本上,排序顺序只是一种顺序关系(数学上)。这是一种排列对象的方式。
这意味着当Object实现Comparable
接口时,只能定义一个订单。让我们对自定义类MyFile
采取更具体的示例:
public class MyFile implements Comparable<MyFile> {
private String name;
private Date creationDate;
private String author;
@Override
public int compareTo(MyFile other) {
return this.name.compareTo(other.name);
}
}
在此示例中,类MyFile实现Comparable
接口,该接口按升序名称对MyFile
的集合进行排序。它实现了一个排序顺序。但是如果你想通过降序来对它们进行排序?还是按日期?还是作者?然后你必须创建不同的排序。但是,您无法再次实现Comparable
接口。这是在您创建自定义Comparator
以获得所期望的行为时。每个Comparator
实现一个排序序列。
public class DateComparator implements Comparator<MyFile> {
@Override
public int compare(MyFile f1, MyFile f2) {
return f1.getDate().compareTo(f2.getDate());
}
}
public class ReverseNameComparator implements Comparator<MyFile> {
@Override
public int compare(MyFile f1, MyFile f2) {
return f2.getName().compareTo(f1.getName());
}
}
这是为同一个类定义的另外两个排序序列。
答案 1 :(得分:0)
通过让您的类实现Comparable
,您可以给它一个自然的顺序。例如,Integer
按其int
值排序。但是,您可以实现其他自定义Comparator
以实现您希望的任何排序。例如,如果我们坚持使用Integer
示例,您可以实现Comparator
来对Integer
个数字的总和,以及它们是否可以被7整除,或者你能想到的任何订单。