You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Arrays.sort和PriorityQueue第二个lambda参数的作用是什么

相关代码片段

Arrays.sort(courses, (a, b) -> a[1] - b[1]);
PriorityQueue<Integer> queue = new PriorityQueue<>((a, b) -> b - a);

原理解释

你看到的带->的语法是Java 8开始支持的Lambda表达式,本质是简写的匿名函数,专门用来给接收「函数式接口」(仅包含一个抽象方法的接口)的方法传参。这两行代码里的第二个参数,都是Comparator比较器接口的实现,作用是自定义排序/优先级判定规则,和你之前用的传起止下标的sort重载是完全不同的方法版本,Java会根据传入的参数类型自动匹配对应实现。

  • 关于Arrays.sort(courses, (a, b) -> a[1] - b[1])
    这个Lambda表达式定义的是课程数组的排序规则:
    比较器的返回规则是固定的:返回负数时参数a排在b前面,返回0时二者优先级相等,返回正数时b排在a前面。这里a[1] - b[1]的逻辑是取每个课程数组下标为1的元素(通常是课程截止时间)做升序排列,截止时间更早的课程会被排在数组前面。

  • 关于new PriorityQueue<>((a, b) -> b - a)
    这个Lambda表达式定义的是优先队列的优先级规则:
    Java的PriorityQueue默认不传比较器时是小顶堆,堆顶是队列里最小的元素。这里b - a把比较逻辑反过来,实现的是大顶堆,堆顶永远是当前队列里值最大的元素,这个写法在课程调度类题目里一般用来存已选课程的时长,方便快速取出时长最长的课程做替换调整。

你之前熟悉的.sort(array, 1, 4)是Arrays.sort的另一个重载,参数含义是待排序数组、排序起始下标、排序结束下标,两个重载的参数类型完全不同,不要混淆。

内容的提问来源于stack exchange,提问作者sdfesvrt ae4t4f w4ef awef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:01:11