对这行Java代码如何按降序排序感到困惑
第一次在这里发布。我试图理解这个Java排序方法实际上是如何对数组进行排序的。我已经使用了Java可视化工具,但它对我来说仍然毫无意义。我知道sort方法接收数组,然后一次使用两个元素将它们提交给表达式(第二个数字减去第一个数字),但我不理解如何使用此值对数组进行排序:对这行Java代码如何按降序排序感到困惑,java,arrays,sorting,arraylist,Java,Arrays,Sorting,Arraylist,第一次在这里发布。我试图理解这个Java排序方法实际上是如何对数组进行排序的。我已经使用了Java可视化工具,但它对我来说仍然毫无意义。我知道sort方法接收数组,然后一次使用两个元素将它们提交给表达式(第二个数字减去第一个数字),但我不理解如何使用此值对数组进行排序: Arrays.sort(arrayList,(Integer number1, Integer number2) -> number2 - number1) (arrayList元素可以是您想要的任何整数)假设您了解ar
Arrays.sort(arrayList,(Integer number1, Integer number2) -> number2 - number1)
(arrayList元素可以是您想要的任何整数)假设您了解array.sort的工作原理。然后,您需要了解比较器是如何工作的
obj1>obj2,如果x>0。
如果x<0,则obj1
它有两个参数,第一个是数组
,第二个是比较器
类的实例Arrays.sort()
方法在内部使用此comparator
实例在排序时比较元素。这里是它内部实现的一个片段,这里c
是比较器的实例
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;
}
if(长度0;j--
掉期(目的地,j,j-1);
返回;
}
如果比较器函数返回正值,则数字将被交换。
=>如果number2>number1,那么(number2-number1)>0(正)=>交换=>number2将放在和number1之前
您可以在function Comparator.compare中查看详细信息:
Arrays.sort(values, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o2 > o1) {
return 1; // need swap
} else if (o2 < o1) {
return -1; // no swap
}
return 0; // no swap
}
});
}
Arrays.sort(值,新的比较器(){
@凌驾
公共整数比较(整数o1,整数o2){
如果(o2>o1){
返回1;//需要交换
}否则如果(o2
Arrays.sort()方法甚至不会对ArrayList进行排序。它只对阵列进行排序,这是为了比较器的“方便”
接口number1-number2
是“默认”(升序)“整数比较器”(参见整数源代码…)
Arrays.sort(values, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o2 > o1) {
return 1; // need swap
} else if (o2 < o1) {
return -1; // no swap
}
return 0; // no swap
}
});
}