Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Collection.sort(List<;T>;,Comparator<;T>;)如何与输入顺序配合使用?_Java_Sorting_Collections - Fatal编程技术网

Java Collection.sort(List<;T>;,Comparator<;T>;)如何与输入顺序配合使用?

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()

例如,如果我想用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() - 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在评论中所述,极值可能会由于溢出而导致问题。

您是否尝试编译该代码?正如您所说,顺序由比较函数决定(此外,您确实不应该使用该方法实现比较。它会导致极值问题。)此外,当不提供比较器时,您只能对可比数据进行排序,这定义了它们的顺序