[英]What's the sort order of Java's Collections.sort(list, comparator)? small to big or big to small?
显然,它没有记录,或者我错过了它。
这是文档的链接,下面是文本作为图像:
编辑 (17/5):我认为太多人把这个问题混淆为比较问题。 它不是。 比较器比较2个元素。 根据那个比较,列表排序。 怎么样? 升序还是降序?
我将进一步细化/简化问题:如果比较器确定元素A小于元素B. 在排序列表中 ,元素A是否位于比元素B更低的索引处?
排序顺序始终是升序 ,比较器定义哪些项比其他项大。
从Collections.sort(List <T>列表,Comparator <?super T> c)的文档中:
根据指定比较器引发的顺序对指定列表进行排序。
比较它的两个参数的顺序。 返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数。
你(或者更确切地说,你的比较器)决定。
Comparator
的compare(T o1, T o2)
在o1
小于o2
时返回负数,则升序( 在ideone上演示 )。 Comparator
的compare(T o1, T o2)
在o1
大于o2
时返回负数,则降序( 在ideone上演示 )。 说同样的事情将是另一种方式sort
假定比较下令传递到它从较小(这两个项目o1
)更大( o2
),并产生一个上升与排序排序是一致的。
Comparator.compareTo(o1, o2)
方法的文档说
比较它的两个参数的顺序。 返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数。
因此,如果您想从自然排序(从小到大)排序,那么您应该编写文档中定义的实现
public int compareTo(Integer o1, Integer o2) {
int v1 = (o1);
int v2 = (o2);
if(v1 == v2) {
return 0;
}
if(v1 < v2) {
return -1; //return negative integer if first argument is less than second
}
return 1;
}
如果您希望排序顺序相反,则从大到小
public int compareTo(Integer o1, Integer o2) {
int v1 = (o1);
int v2 = (o2);
if(v1 == v2) {
return 0;
}
if(v1 < v2) {
return 1; //do the other way
}
return -1;
}
根据文档https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List,%20java.util.Comparator) ,集合的排序实现.sort(list,comparator)是mergeSort。
鉴于mergeSort生成的结果是升序( https://en.wikipedia.org/wiki/Merge_sort ),Collections.sort(列表,比较器)的排序顺序是升序。
也就是说,如果比较器确定元素A小于元素B.在排序列表中,元素A将位于比元素B小的索引处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.