Collection.sort(List <t>,Comparator <t>)如何使用输入顺序?

时间:2015-06-05 20:36:14

标签: java sorting collections

例如,如果我想对具有ID的人进行排序,并且我编写了一个实现比较器的内部类,如

public class IDCompare implements Comparator<People>{

    // this order of compare will sort in ascending order
    @Override
    public int compare(People o1, People o2) {
        return o1.getID() - o2.getID();
    }
    // this order of compare will sort in descending order
    @Override
    public int compare(People o1, People o2) {
        return o2.getID() - o1.getID();
    }
}

Collection.sort()方法如何知道排序顺序并根据输入顺序实现我的?

1 个答案:

答案 0 :(得分:1)

如比较器接口文档中所述,compare(T o1, To2)方法必须返回:

  

负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数。

这正是您的代码正在做的事情:

  • o1.getID()低于o2.getID()时,减法会返回一个负数。
  • o1.getID()等于o2.getID()时,减法返回零。
  • o1.getID()大于o2.getID()时,减法会返回正数。

产生的“符号”用于对集合进行排序。

请注意,正如Jon Skeet在评论中所述,极端值可能会因溢出而导致问题。

相关问题