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

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.dtcms.com/a/360847.html

相关文章:

  • golang 14并发编程
  • 20250828的学习笔记
  • Socket-TCP 上位机下位机数据交互框架
  • 深入理解 HTTP 与 HTTPS:区别以及 HTTPS 加密原理
  • UART-TCP双向桥接服务
  • Flutter WebAssembly (Wasm) 支持 - 实用指南Flutter WebAssembly (Wasm) 支持 - 实用指南
  • 解决爬虫IP限制:Selenium隧道代理完整解决方案
  • 聚焦智慧教育新趋势:AI+虚拟仿真技术加速未来学习转型
  • 算法面试题(上)
  • 【Java后端】Spring Boot 全局域名替换
  • Azure AI Search构建RAG的优化点
  • 接口自动化测试之设置断言思路
  • 大模型应用开发面试实录:LLM原理、RAG工程与多Agent场景化落地解析
  • mysql实例是什么?
  • 产品月报|睿本云8月产品功能迭代
  • Topaz Video AI:AI驱动的视频增强与修复工具
  • 嵌入式实时操作系统(二十五)-实时性
  • 从 “能用” 到 “好用”:生成式 AI 落地三大核心痛点与破局路径
  • nt5inf.hash排序后前后两个共五个和nti5nf.cat文件用asn.1editor打开后导出后部分内容的对比--重要
  • Unity中多线程与高并发下的单例模式
  • 结构体成员大小及内存对齐练习
  • Electron使用WebAssembly实现CRC-16 CCITT校验
  • 9.1C++——类中特殊的成员函数
  • 安卓悬浮球-3566-测试报告
  • vue社区网格化管理系统(代码+数据库+LW)
  • Adobe Acrobat打开pdf文件时闪退如何解决?
  • OpenCV-CUDA 图像处理
  • 论文阅读_TradingAgents多智能体金融交易框架
  • .net 微服务jeager链路跟踪
  • C++11 ——— lambda表达式