gpt4 book ai didi

java - java中Comparator是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 06:19:29 25 4
gpt4 key购买 nike

Java Comparator interface -以下是Comparator 工作原理的示例。

我的问题是:当方法compare时,Object类型o1o2在哪里(对象o1,对象o2)?我不知道看到任何Class调用compare()方法。我只看到 Collections.sort(al,new NameComparator());

请解释一下,谢谢。

最佳答案

当您对任何集合调用 Collections.sort 并传递比较器引用时,底层排序方法会调用比较方法来决定两个对象之间哪个更大。这个过程根据排序策略发生。

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。

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

   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 方法。

如果我在这里发布整个类代码是不好的。请查看我列出的类,您将找到对比较方法的调用所在位置的引用,这使得比较器逻辑可以在集合排序中工作。

关于java - java中Comparator是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48494211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com