实现Comparator如何在java中工作?

时间:2018-01-29 04:02:29

标签: java

Java Comparator interface - 以下是Comparator如何工作的示例。

我的问题是:方法Object时,o1类型o2compare(Object o1,Object o2)的来源是什么?我不知道看到任何Class调用compare()方法。我只看到Collections.sort(al,new NameComparator());

请解释一下,谢谢。

1 个答案:

答案 0 :(得分:0)

当您在任何集合上调用Collections.sort并传递比较器引用时,基础排序方法会调用compare方法来确定两个对象之间哪个更大。此过程根据排序策略进行。

Java代码参考:这是链接:

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

  4. 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);
       }
     }
    
  5. 如果c不为null,让我们检查一种排序技术:legacyMergeSort。

  6. 一个调用比较方法的片段:

       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;
      }
    

    注意c.compare方法。

    如果我在这里发布整个班级代码,那就不好了。请查看我列出的类,您将找到比较调用方法的位置参考,这使得比较器逻辑在集合排序中起作用。