我正在查看一堆类似的代码并使用Comparator<T>
对一系列字符串进行排序(我问这个问题的唯一原因是我对如何对此感到好奇Comparator<T>
处理所有这些):
String[] names = //An string array
Arrays.sort(names, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o1.length()-o2.length());
}
});
我对此很熟悉:
Arrays.sort(names, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1.length()>o2.length())
return 1;
else if(o1.length()==o2.length())
return 0;
else
return -1;
}
});
如果第一个String的长度更大则返回1,如果第二个String更大则返回-1,如果长度相同则返回零。但是第一个片段返回了它们的长度之间的差异,它可能小于-1且大于1.那么Comparator<T>
如何处理它们产生相同结果的所有这些?
答案 0 :(得分:6)
来自https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html#compare(T,%20T):
返回:负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数。
它不需要是-1或1,而只需要一个负整数或一个正整数。
答案 1 :(得分:3)
不确定这是否是您的意思,但Comparator
结果是定性,而不是定量。
任何超过0的结果意味着第一个参数被认为大于第二个参数,任何小于0的结果意味着第一个参数被认为是更少(和0,而0仅表示它们被认为是等价的)
第一个实现返回距离,是的,但就Comparable
而言,这是无关的信息。顺便说一句,第一个实现真的应该使用Integer.compare()
。
答案 2 :(得分:1)
答案 3 :(得分:0)
比较器只是查看结果的符号,因此它可以是:
0
:两个元素相同positive
:o1更大negative
:o2更大