Array.sort()中的第二个参数是什么意思,是java里面的哪个知识点?
Arrays.sort(idx, (i, j) -> queries[i] - queries[j]);
Arrays.sort()
方法定义是一个用于排序数组的静态方法,它可以接受一个待排序数组和一个 Comparator
对象。
第二个参数 (i, j) -> queries[i] - queries[j]
是一个 lambda 表达式,也是一个 Comparator
接口的实现。它指定了在对数组 idx
进行排序时,应该如何比较其中的元素。
关键这个 lambda 表达式接受两个参数 i
和 j
,它们代表了数组 idx
中要进行比较的两个元素的下标。queries
数组是另外一个数组,它和 idx
数组一起被排序。 (i, j) -> queries[i] - queries[j]
会按照查询数组 queries
中的值从小到大比较 idx
数组中的两个元素,也就是说,它会将 idx
数组按照查询数组 queries
中的值升序排列。
使用场景是在需要比较的时候动态创建比较器,使得代码更加简洁灵活。
private static int [][] sortRows(int[][] arr) {//行排序
for (int i = 0; i < arr.length; i++) {
Arrays.sort(arr[i]);
}
return arr;
}
问题解答:
在Java中,使用Array.sort()方法时,第二个参数代表的是一个Comparator实例,用于定制排序规则,它属于Java中的集合类知识点。
示例代码:
如果要对数组按照第二列从大到小排序,可以使用以下代码:
int[][] arr = {{1, 3}, {2, 2}, {3, 1}}; Arrays.sort(arr, new Comparator() { @Override public int compare(int[] o1, int[] o2) { return o2[1] - o1[1]; } });
其中,new Comparator()是创建了一个匿名内部类,实现了Comparator接口,compare方法中的o1和o2分别表示待比较的两个元素,通过o2[1] - o1[1]实现按照第二列从大到小排序的逻辑。
如果要对包含对象的数组按照对象中的某个属性进行排序,可以使用以下代码:
Person[] arr = {new Person("Alice", 23), new Person("Bob", 20), new Person("Charlie", 25)}; Arrays.sort(arr, new Comparator() { @Override public int compare(Person o1, Person o2) { return o1.getAge() - o2.getAge(); } });
其中,Person是一个自定义类,实现了getAge()方法用于获取年龄属性。new Comparator()是创建了一个匿名内部类,实现了Comparator接口,compare方法中的o1和o2分别表示待比较的两个元素,通过o1.getAge() - o2.getAge()实现按照年龄从小到大排序的逻辑。