我想了解为什么 o2 - o1 返回给我一个排序列表,我不明白其背后的逻辑。 这是我做过的一个方法,但我不明白为什么这个 o2-o1 对我的 ArrayList 进行排序。
我尝试在互联网上查找但没有找到任何答案。
ArrayList<Integer> array = new ArrayList<Integer>();
array.add(1);
array.add(3);
array.add(2);
array.add(5);
array.add(4);
array.add(6);
array.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o2 - o1;
}
});
for (int s : array) {
System.out.println(s);
}
最佳答案
ArrayList
继承sort
来自列表
。它需要一个 Comparator
来通过其 compare
比较列表条目。方法。 compare
的 JavaDoc 说:
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
这就是你的代码的作用。 o2 - o1
自动将 Integer
实例拆箱为 int
,然后从 中减去
值。如果 o1
值o2o1
大于 o2
,则结果为负整数;如果它们相同,则结果为零;如果 o1
为正整数,则结果为正整数。小于 o2
。
sort
使用值对重复调用比较器的 compare
,并使用这些返回值对列表进行排序。
关于java - 为什么当我返回 object1-object2 时,自制比较起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57391280/