Java Comparator interface -
以下是Comparator
如何工作的示例。
我的问题是:方法Object
时,o1
类型o2
和compare(Object o1,Object o2)
的来源是什么?我不知道看到任何Class
调用compare()方法。我只看到Collections.sort(al,new NameComparator());
请解释一下,谢谢。
答案 0 :(得分:0)
当您在任何集合上调用Collections.sort并传递比较器引用时,基础排序方法会调用compare方法来确定两个对象之间哪个更大。此过程根据排序策略进行。
Java代码参考:这是链接:
list.sort在内部将列表转换为数组并调用
Object[] a = this.toArray();
Arrays.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);
}
}
如果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方法。
如果我在这里发布整个班级代码,那就不好了。请查看我列出的类,您将找到比较调用方法的位置参考,这使得比较器逻辑在集合排序中起作用。