当前位置: 首页 > backend >正文

Java比较器

1. 什么是比较器?

比较器就是告诉程序"如何比较两个元素"的规则。

2. 基本语法

Arrays.sort(intervals, new Comparator<int[]>() {@Overridepublic int compare(int[] a, int[] b) {return Integer.compare(a[0], b[0]);}
});

简化写法(Lambda表达式)

Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));

参数含义

(a,b)->Integer.compare(a[0],b[0]);
  • a:第一个区间,比如 [1,3]
  • b:第二个区间,比如 [2,6]
  • a[0]:第一个区间的起始点,比如 1
  • b[0]:第二个区间的起始点,比如 2

比较规则

Integer.compare(a[0], b[0])

这个函数的作用:

  • 如果 a[0] < b[0],返回负数(-1)
  • 如果 a[0] == b[0],返回0
  • 如果 a[0] > b[0],返回正数(1)

具体例子

// 假设有两个区间
int[] a = {1, 3};  // 区间 [1,3]
int[] b = {2, 6};  // 区间 [2,6]// 比较 a[0] 和 b[0]
Integer.compare(1, 2)  // 1 < 2,返回负数
// 结果:-1// 这意味着 [1,3] 应该排在 [2,6] 前面

排序过程演示

// 原始数组
int[][] intervals = {{2,6}, {1,3}, {8,10}};// 排序过程:
// 1. 比较 [2,6] 和 [1,3]
//    Integer.compare(2, 1) = 1 (正数)
//    所以 [2,6] 排在 [1,3] 后面// 2. 比较 [2,6] 和 [8,10]
//    Integer.compare(2, 8) = -1 (负数)
//    所以 [2,6] 排在 [8,10] 前面// 最终排序结果:[[1,3], [2,6], [8,10]]

其他比较器例子

按结束点排序

(a, b) -> Integer.compare(a[1], b[1])

按区间长度排序

(a, b) -> Integer.compare(a[1] - a[0], b[1] - b[0])

先按起始点,再按结束点排序

(a, b) -> {if (a[0] != b[0]) {return Integer.compare(a[0], b[0]);}return Integer.compare(a[1], b[1]);
}

总结

(a, b) -> Integer.compare(a[0], b[0])

这个比较器的含义是:

  • 比较两个区间的起始点
  • 起始点小的排在前面
  • 起始点大的排在后面

这就是Java中定义比较器的标准语法!

sort的排序规则

Arrays.sort() 就是根据比较器返回的 -1、0、1 来决定排序顺序的:

返回值含义:

  • -1:第一个元素应该排在第二个元素前面
  • 0:两个元素相等,顺序不变
  • 1:第一个元素应该排在第二个元素后面

具体例子

int[][] intervals = {{2,6}, {1,3}, {8,10}};// 排序过程:
// 1. 比较 [2,6] 和 [1,3]
//    Integer.compare(2, 1) = 1
//    返回1,所以 [2,6] 排在 [1,3] 后面// 2. 比较 [2,6] 和 [8,10]  
//    Integer.compare(2, 8) = -1
//    返回-1,所以 [2,6] 排在 [8,10] 前面// 最终结果:[[1,3], [2,6], [8,10]]

Integer.compare() 的返回值

Integer.compare(a, b) 的返回值:如果 a < b,返回 -1
如果 a == b,返回 0  
如果 a > b,返回 1

验证示例

public class SortDemo {public static void main(String[] args) {int[][] intervals = {{2,6}, {1,3}, {8,10}};System.out.println("排序前:" + Arrays.deepToString(intervals));// 演示比较过程System.out.println("\n比较过程:");System.out.println("Integer.compare(2, 1) = " + Integer.compare(2, 1));  // 1System.out.println("Integer.compare(2, 8) = " + Integer.compare(2, 8));  // -1System.out.println("Integer.compare(1, 8) = " + Integer.compare(1, 8));  // -1// 执行排序Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));System.out.println("\n排序后:" + Arrays.deepToString(intervals));}
}

输出结果

排序前:[[2,6], [1,3], [8,10]]比较过程:
Integer.compare(2, 1) = 1
Integer.compare(2, 8) = -1  
Integer.compare(1, 8) = -1排序后:[[1,3], [2,6], [8,10]]

总结

您的理解完全正确!

  • sort() 就是根据 -1、0、1 来排序的
  • -1 = 排在前面
  • 0 = 顺序不变
  • 1 = 排在后面

这就是Java排序算法的核心机制!

http://www.xdnf.cn/news/19481.html

相关文章:

  • 如何在 vscode 上用 git 将项目 push 到远程仓库 and 常用Git 命令
  • 剧本杀小程序系统开发:重塑社交娱乐新生态
  • 【开题答辩全过程】以 基于Spring Boot的房屋租赁系统的设计与实现为例,包含答辩的问题和答案
  • 神经网络1——sklearn的简单实现
  • leetcode笔记
  • 20.29 QLoRA适配器实战:24GB显卡轻松微调650亿参数大模型
  • 堡垒机(跳板机)入门指南:构建更安全的多服务器运维架构
  • LINUX 91 SHELL:删除空文件夹 计数
  • HCIP-Datacom Core Technology V1.0_7 BGP基础
  • (纯新手教学)计算机视觉(opencv)实战十二——模板匹配(cv2.matchTemplate)
  • SpringAI模型评估
  • 刀片电池 vs 三元锂:家庭用车选谁更长寿?
  • 海康相机开发---HCNetSDK
  • 【2025ICCV】
  • SpringCloud-服务注册-服务发现
  • 35.序列(中)
  • 植物来源细胞外囊泡的脂质组学分析
  • 【项目思维】这是一份嵌入式软件开发的大纲(简化版)
  • LabVIEW自动抗乳化测试仪
  • 高效大规模创新3D重建模型iLRM
  • 进阶篇(上):大模型训练工作流(LoRA 微调实战)
  • 链表相关OJ题
  • 2025年AI智能体开源技术栈全面解析:从基础框架到垂直应用
  • RocksDB 在 macOS M 系列 上运行时报错的解决方案
  • 音视频面试题集锦第 36 期
  • Unity:XML笔记
  • 在 Qt/C++ 中查找最近点并截断 QVector<QPointF>
  • 驱动——miscdevice框架 vs 标准字符设备cdev框架
  • Android开发之add方式添加Fragment生命周期不响应
  • 单例模式