【发布时间】:2020-02-10 01:24:33
【问题描述】:
从我见过的所有排序方法示例中,我从未遇到过它们传递比较器定义的方法。 如果比较器设计为返回负数、正数或 0 来对对象进行排序,那么 sort 方法如何处理这些信息? sort 方法如何从 Comparator 定义中获取有意义的信息并执行其操作?
这里是有问题的排序方法:
public void sort() {
library.sort(new BookComparator());
}
这是整个 Comparator 类:
import java.util.Comparator;
public class BookComparator implements Comparator<Book> {
public int compare(Book a, Book b) {
if(a == null || b == null) {
throw new NullPointerException();
}
int result = 0 ;
if(a.getAuthor() == null) {
if(b.getAuthor() != null) {
result = -1;
}
} else if(b.getAuthor() == null) {
result = 1;
} else {
result = a.getAuthor().compareTo(b.getAuthor());
}
if(result !=0) {
return result;
}
if(a.getTitle() == null) {
if(b.getTitle() != null) {
result = -1;
}
} else if(b.getTitle() == null) {
result = 1;
} else {
result = a.getTitle().compareTo(b.getTitle());
}
if(result !=0) {
return result;
}
if(a.getYear() < b.getYear()){
return -1;
} else if (a.getYear() == b.getYear()){
return 0;
} else {
return 1;
}
}
}
【问题讨论】:
-
所有种类,所有语言,都需要某种比较器。 Java 的默认比较器是使用所谓的“自然排序”,即 Comparable 实例的比较器。对于非 Comparables(或覆盖默认值),您提供要使用的比较器(而不是)
-
你能解释一下你的精确问题是什么吗?因为实际上,您的问题的答案基本上是“排序算法使用比较器进行比较”。但我不确定这个答案是否会让你满意。
标签: java sorting arraylist compareto