Java Collection.sort(List<;T>;,Comparator<;T>;)如何与输入顺序配合使用?
例如,如果我想用ID对人进行排序,我编写了一个内部类,它实现了类似comparator的Java Collection.sort(List<;T>;,Comparator<;T>;)如何与输入顺序配合使用?,java,sorting,collections,Java,Sorting,Collections,例如,如果我想用ID对人进行排序,我编写了一个内部类,它实现了类似comparator的 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()
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();
}
}
public类IDCompare实现了Comparator{
//此比较顺序将按升序排序
@凌驾
公共整数比较(人员o1、人员o2){
返回o1.getID()-o2.getID();
}
//此比较顺序将按降序排序
@凌驾
公共整数比较(人员o1、人员o2){
返回o2.getID()-o1.getID();
}
}
Collection.sort()
方法如何知道排序顺序并根据输入顺序实现my?如Comparator接口文档中所述,该方法必须返回:
作为第一个参数的负整数、零或正整数小于、等于或大于第二个参数
这正是您的代码所做的:
- 当
低于o1.getID()
时,减法返回一个负数o2.getID()
- 当
等于o1.getID()
时,减法返回零o2.getID()
- 当
大于o1.getID()
时,减法返回一个正数o2.getID()
请注意,正如Jon Skeet在评论中所述,极值可能会由于溢出而导致问题。您是否尝试编译该代码?正如您所说,顺序由比较函数决定(此外,您确实不应该使用该方法实现比较。它会导致极值问题。)此外,当不提供比较器时,您只能对可比数据进行排序,这定义了它们的顺序