问题描述
任何人都可以向我解释这段代码的工作原理。
Arrays.sort(ind,(l,r) -> nums[l] - nums[r]);
nums = [3,2,4]
ind = [0,1,2]
我调试了它,并注意到了
l = 1
r = 0
then
l = 2
r = 1
then
l = 2
r = 0
我得到
ind = [1,2]
我很困惑。谁能解释一下它是如何工作的。
解决方法
ind
是一个索引值数组,初始索引值从0到len-1。
对sort()
的调用将根据给定索引处num
中的值对索引值进行排序。
结果是,如果您为num[i]
中的值打印ind
,则按照排序后出现的顺序打印,这些值将按排序顺序(升序)。
for (int j = 0; j < ind.length; j++) {
int i = ind[j];
int num = nums[i];
System.out.println(num);
}
// Short version
for (int i : ind)
System.out.println(nums[i]);
输出
2
3
4
,
此代码使用Arrays.sort(T[] a,Comparator<? super T> c)
。
此函数接受参数:
- 您要排序的
Array
- 一个
Comparator
Comparator
是仅具有一种方法的接口:public int compare(Object obj1,Object obj2)
。如果x < 0
分别是0
,x > 0
或obj1
lower than
,则此方法返回equal
,greater than
或obj2
因此,由于Comparator
有一种独特的方法,您可以使用lambda,因此可以在这里进行操作:(l,r) -> nums[l] - nums[r]
。
这是“我正在创建一个新的Comparator,这是其独特方法所能做的事情”的简短版本:
-
(l,r)
:它需要l和r作为参数 -
nums[l] - nums[r]
返回该表达式的结果。
如您所见:
- 如果
nums[l]
>nums[r]
是肯定的结果 - 如果
nums[l]
=nums[r]
,则结果为0 - 如果
nums[l]
nums[r]的结果是否定的