对这行Java代码如何按降序排序感到困惑

对这行Java代码如何按降序排序感到困惑,java,arrays,sorting,arraylist,Java,Arrays,Sorting,Arraylist,第一次在这里发布。我试图理解这个Java排序方法实际上是如何对数组进行排序的。我已经使用了Java可视化工具,但它对我来说仍然毫无意义。我知道sort方法接收数组,然后一次使用两个元素将它们提交给表达式(第二个数字减去第一个数字),但我不理解如何使用此值对数组进行排序: Arrays.sort(arrayList,(Integer number1, Integer number2) -> number2 - number1) (arrayList元素可以是您想要的任何整数)假设您了解ar

第一次在这里发布。我试图理解这个Java排序方法实际上是如何对数组进行排序的。我已经使用了Java可视化工具,但它对我来说仍然毫无意义。我知道sort方法接收数组,然后一次使用两个元素将它们提交给表达式(第二个数字减去第一个数字),但我不理解如何使用此值对数组进行排序:

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
            }
        });
    }