Arrays.sort()如何解读基于Integer.compare()的Lambda表达式返回值?
关于Arrays.sort中Lambda返回值的解读
首先得明确:你看到的这个Lambda表达式(a,b)->Integer.compare(a[0],b[0]),本质是实现了Comparator<int[]>接口的compare方法——因为intervals是int[][]类型,Arrays.sort的第二个参数需要一个能比较两个int[]元素的比较器。
排序算法如何解读返回值
sort方法只关心返回值的符号,具体数值是1、-1还是其他正负整数都不影响,规则如下:
- 返回负数:表示第一个参数
a应该排在第二个参数b的前面(即逻辑上a < b) - 返回0:表示
a和b的排序优先级相同,它们的相对位置在排序后可能保持不变(取决于排序算法的稳定性) - 返回正数:表示
a应该排在b的后面(即逻辑上a > b)
结合你的例子具体说
Integer.compare(a[0],b[0])的返回值刚好严格符合上述规则:
- 当
a[0] < b[0]时,返回-1(负数),所以a会被放到b前面 - 当
a[0] == b[0]时,返回0,两者位置不变 - 当
a[0] > b[0]时,返回1(正数),a会被放到b后面
补充个小细节
其实Comparator的compare方法允许返回任意正负整数,不一定是1或-1——比如你写return a[0] - b[0]也能实现同样的排序逻辑(只要不溢出),sort方法只会根据返回值的正负来判断元素的相对顺序,具体数值大小不影响排序结果。
内容的提问来源于stack exchange,提问作者Ankit Biswas
相关产品推荐
相关产品推荐

