Ali*_*aka 39 java sorting collections comparator
显然,它没有记录,或者我错过了它.
这是文档的链接,下面是文本作为图像:
编辑(17/5):我认为太多人把这个问题混淆为比较问题.它不是.比较器比较2个元素.根据那个比较,列表排序.怎么样?升序还是降序?
我将进一步细化/简化问题:如果比较器确定元素A小于元素B. 在排序列表中,元素A是否位于比元素B更低的索引处?

And*_*mas 34
排序顺序始终是升序,比较器定义哪些项比其他项大.
从Collections.sort(List <T>列表,Comparator <?super T> c)的文档中:
根据指定比较器引发的顺序对指定列表进行排序.
比较它的两个参数的顺序.返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数.
das*_*ght 20
你(或者更确切地说,你的比较器)决定.
Comparator的compare(T o1, T o2)回报是负数o1小于o2,你得到升序(在ideone上演示).Comparator的compare(T o1, T o2)回报是负数o1大于o2,你得到降序(在ideone上演示).说同样事情的另一种方式是sort假设比较器命令传递给它的两个项从small(o1)到greater(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;
}
Run Code Online (Sandbox Code Playgroud)
如果你希望排序是相反的,那就是大到小
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47135 次 |
| 最近记录: |