lambda表达式与Comparator for Arrays.sort的匿名实现之间的区别? [重复]

问题描述 投票:2回答:1

假设我在Java中有一个数组:

int[][] arr = new int[n][2];

例如,我想根据第二维的第一个值对它进行排序,因此对于每个元素iarr[i][0]

[我看到Java中有两种类似的方法,我想知道有什么区别(效率,何时使用哪种方法,...)。

方法1)

Arrays.sort(arr, (a, b) -> {
  a[0] - b[0];
});

方法2)

Arrays.sort(arr, new Comparator<int[]>(){
  @Override
  public int compare(int[] a, int[] b) {
    return a[0] - b[0];
  }
};

替代方法:

class Test implements Comparable<Test>{
  int val0, val1;
  // Contructor
  public int compareTo(Test t) {
    return val0.compareTo(t.val0);
  }
}

然后在main方法中使用:

Arrays.sort(arr);

arr在哪里:

Test[] arr = new int[n];

这里val0val1分别是第二维的第0个值和第1个值。我不会创建一个类来比较一个值,但是有时我将其用于更复杂的系统,这反过来又是创建比较器的另一种方式,如果我测量计算时间,它会更快,您知道为什么吗?] >

该问题与this不同,因为它没有询问如何比较。它也与this不同,因为它还考虑了类定义的Alternative method

。并且this未指定关于比较。

假设我在Java中有一个数组:int [] [] arr = new int [n] [2];我想例如根据第二维的第一个值对它进行排序,因此对于每个元素i,arr [i] [0]。我看到了...

java sorting compare comparator
1个回答
-1
投票

假设您有尺寸为3的二维数组和相应的元素

int[][] arr= new int[3][3];

arr[0]= new int[]{1,2,3};

arr[1]= new int[]{2,1,3};

arr[2]= new int[]{0,0,3};

您可以将Arrays.sort()Comparator一起使用,以基于每个内部数组的第一个元素进行排序

System.out.println(Arrays.deepToString(arr));    //[[1, 2, 3], [2, 1, 3], [0, 0, 3]]

Arrays.sort(arr, Comparator.comparingInt(i->i[0]));

System.out.println(Arrays.deepToString(arr));    // [[0, 0, 3], [1, 2, 3], [2, 1, 3]]
© www.soinside.com 2019 - 2024. All rights reserved.