Java sort()方法接受1D数组,但我也可以传递2D数组,那么为什么';ti do int[]a=b(其中b是二维数组)?

Java sort()方法接受1D数组,但我也可以传递2D数组,那么为什么';ti do int[]a=b(其中b是二维数组)?,java,arrays,sorting,Java,Arrays,Sorting,我很难理解可以将2D数组传递给java的Arrays.sort()方法的概念。(我看过java文档,sort方法只能接受1D数组) 但是当我尝试下面的代码时,我得到了一个错误 int[][] b={{1,2},{2,3}}; int[] a=b; 但是下面的代码可以正常工作 int[][] temp = { { 1, 50, 5 }, { 2, 30, 8 }, { 3, 90, 6 },{ 4, 20, 7 }, { 5, 80, 9 }, }; Arrays.sort(temp, new

我很难理解可以将2D数组传递给java的Arrays.sort()方法的概念。(我看过java文档,sort方法只能接受1D数组)
但是当我尝试下面的代码时,我得到了一个错误

int[][] b={{1,2},{2,3}};
int[] a=b;
但是下面的代码可以正常工作

int[][] temp = { { 1, 50, 5 }, { 2, 30, 8 }, { 3, 90, 6 },{ 4, 20, 7 }, { 5, 80, 9 }, };
Arrays.sort(temp, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
    return Integer.compare(o2[1], o1[1]);
}
});
int[]temp={{1,50,5},{2,30,8},{3,90,6},{4,20,7},{5,80,9};
sort(temp,new Comparator(){
@凌驾
公共整数比较(整数[]o1,整数[]o2){
返回整数。比较(o2[1],o1[1]);
}
});
Java中没有您认为的“2D数组”。
int[][]
是一个数组,其中每个元素都是
int[]
int[]
是一个数组,其中每个元素都是
int


由于
int[]
int
是不同的类型,您的赋值无法工作。

您试图将二维数组赋值给一维数组引用。Java没有2D数组。它只有1D数组或1D数组。您的助手应该能够将字体放在右手边

int[][] b={{1,2},{2,3}};
int[] a=b;
它们是不兼容的类型,导致编译错误。你必须这样纠正它

 int[][] a = b;

排序方法的签名是-
Arrays.sort(T[],ComparatorJava没有真正的2D数组。它有一个由1D数组组成的1D数组。这意味着您可以将int[][]传递给Arrays.sort,只要您为int[][]元素传递一个比较器

    int[][] temp = { { 1, 50, 5 }, { 2, 30, 8 }, { 3, 90, 6 },{ 4, 20, 7 }, { 5, 80, 9 }, };
    Arrays.sort(temp, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        for(int i=0;i<((o1.length<o2.length)?o1.length:o2.length);i++) {
            if (o1[i]!=o2[i])
                return o1[i]-o2[i];
        }
        if (o1.length!=o2.length)
            return o1.length-o2.length;
        return 0;
    }
    });
e、 g

你也可以写

Object[] x = a; // as int[][] is an Object.
Object[] y = b; // as int[] is an Object.
Object[] z = c; // doesn't compile. as int is not an Object.

在2D数组排序示例中,您只需检查两个1D数组的第二个元素并对其进行比较,就可以比较两个1D数组。(请注意,数组中的索引从0开始)。因此,它一定会起作用

移除这个自定义比较器,您将得到一个伪排序数组


但是您肯定不能将基本2D数组称为基本1D数组,因为编译器知道它们的类型,并且会给您带来错误。

您不能将二维数组放在一维数组中。 这个

行得通

排序将检查所有元素

    int[][] temp = { { 1, 50, 5 }, { 2, 30, 8 }, { 3, 90, 6 },{ 4, 20, 7 }, { 5, 80, 9 }, };
    Arrays.sort(temp, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        for(int i=0;i<((o1.length<o2.length)?o1.length:o2.length);i++) {
            if (o1[i]!=o2[i])
                return o1[i]-o2[i];
        }
        if (o1.length!=o2.length)
            return o1.length-o2.length;
        return 0;
    }
    });
int[]temp={{1,50,5},{2,30,8},{3,90,6},{4,20,7},{5,80,9};
sort(temp,new Comparator(){
@凌驾
公共整数比较(整数[]o1,整数[]o2){

对于(int i=0;我只看到数组,而不是ArrayList。是的,我理解。但是为什么sort()使用2D数组,尽管它的文档说它只能使用1D数组是的,我理解。Peter的答案解释得很好。先生,我得到了您的答案,但请您提供更多详细信息。
    int[][] temp = { { 1, 50, 5 }, { 2, 30, 8 }, { 3, 90, 6 },{ 4, 20, 7 }, { 5, 80, 9 }, };
    Arrays.sort(temp, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        for(int i=0;i<((o1.length<o2.length)?o1.length:o2.length);i++) {
            if (o1[i]!=o2[i])
                return o1[i]-o2[i];
        }
        if (o1.length!=o2.length)
            return o1.length-o2.length;
        return 0;
    }
    });
    int[][] temp = { { 1, 50, 5 }, { 2, 30, 8 }, { 3, 90, 6 },{ 4, 20, 7 }, { 5, 80, 9 }, };
    Arrays.sort(temp, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        Arrays.sort(o1);
        Arrays.sort(o2);
        for(int i=0;i<((o1.length<o2.length)?o1.length:o2.length);i++) {
            if (o1[i]!=o2[i])
                return o1[i]-o2[i];
        }
        if (o1.length!=o2.length)
            return o1.length-o2.length;
        return 0;
    }
    });