例如,如果我想对具有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()
方法如何知道排序顺序并根据输入顺序实现我的?
答案 0 :(得分:1)
如比较器接口文档中所述,compare(T o1, To2)
方法必须返回:
负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数。
这正是您的代码正在做的事情:
o1.getID()
低于o2.getID()
时,减法会返回一个负数。o1.getID()
等于o2.getID()
时,减法返回零。o1.getID()
大于o2.getID()
时,减法会返回正数。产生的“符号”用于对集合进行排序。
请注意,正如Jon Skeet在评论中所述,极端值可能会因溢出而导致问题。