Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/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中,implements Comparator是如何工作的?_Java_Sorting_Comparator - Fatal编程技术网

在java中,implements Comparator是如何工作的?

在java中,implements Comparator是如何工作的?,java,sorting,comparator,Java,Sorting,Comparator,- 下面是比较器工作原理的示例 我的问题是:当方法比较(对象o1,对象o2)时,对象类型o1和o2在哪里?我不知道是否看到任何类调用compare()方法。我只看到Collections.sort(al,newnamecomparator()) 请解释一下,谢谢。当您调用Collections.sort对任何集合进行排序并传递comparator引用时,底层排序方法会调用compare方法来决定两个对象之间哪个更大。此过程根据排序策略进行 Java代码参考:以下是链接: 您可以调用Collect

- 下面是
比较器
工作原理的示例

我的问题是:当方法
比较(对象o1,对象o2)
时,对象类型
o1
o2
在哪里?我不知道是否看到任何
调用compare()方法。我只看到Collections.sort(al,newnamecomparator())


请解释一下,谢谢。

当您调用Collections.sort对任何集合进行排序并传递comparator引用时,底层排序方法会调用compare方法来决定两个对象之间哪个更大。此过程根据排序策略进行

Java代码参考:以下是链接:

  • 您可以调用Collections.sort(collectionReference、comparatorReference)
  • 第一个在内部调用:list.sort(comparatorReference)
  • list.sort在内部将列表转换为数组并调用
    Object[]a=this.toArray();
    sort(a,(Comparator)comparatorReference)

  • Arrays.sort具有以下逻辑:

     public static <T> void sort(T[] a, Comparator<? super T> c) {
       if (c == null) {
        sort(a);
       } else {
         if (LegacyMergeSort.userRequested)
            legacyMergeSort(a, c);
         else
            TimSort.sort(a, 0, a.length, c, null, 0, 0);
       }
     }
    

    publicstaticvoidsort(T[]a,comparator
    sort
    例程将对列表中的对象调用compare几次,直到对列表进行排序
       if (length < INSERTIONSORT_THRESHOLD) {
        for (int i=low; i<high; i++)
            for (int j=i; j>low && c.compare(dest[j-1], dest[j])>0; j--)
                swap(dest, j, j-1);
        return;
      }