【发布时间】:2014-08-13 22:43:16
【问题描述】:
Comparator 接口中 compare() 方法的输出是 -1,0 或 1。然后将其传递给 Collections.sort() 方法,该方法可用于以自定义方式对列表进行排序。
sort() 对 compare() 方法的结果做了什么? (-1,0 或 1)
我认为我最困惑的是 compare() 有三个输出 负、正或 0)。但是为什么算法不只需要其中两个呢?不能 a=b 时的动作与 a>b 或 a
例如。比较两个数字 a 和 b,如果 ab 则取 b(compare() 返回 +1)。为什么算法需要区分 a
例如。
class ReverseAlphabeticalComparator implements Comparator<Integer> {
@Override
public int compare(Integer i1, Integer i2) {
if(i1 > i2) {
return 1;
}
else if(i1 < i2) {
return -1;
}
return 0;
}
class App {
public static void main(String[] args) {
List<Integer> animals = new ArrayList<Integer>();
animals.add(6);
animals.add(2);
animals.add(4);
animals.add(7);
animals.add(8);
animals.add(3);
Collections.sort(numbers, new ReverseNumericalComparator());
for(String numbers: numbers) {
System.out.println(numbers); //Prints numbers in reverse eg. 8,7,6,4,3,2
}
}
}
【问题讨论】:
-
我建议您尝试研究如何为元素列表编写排序算法,只使用一种告诉您两个对象是否大于、小于或等于彼此的方法,然后你可以回答你自己的问题。 ;)
标签: java sorting collections compare comparator