如何解决Arrays.sortind,l,r-> nums [l]-nums [r];
任何人都可以向我解释这段代码的工作原理。
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]的结果是否定的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。