collections.min/max依据自然顺序或comparator比较,不依赖隐式规则;空集合抛nosuchelementexception,null元素在无comparator时抛nullpointerexception,支持自定义比较器处理null及多级排序,时间复杂度o(n)。

Collections.min 和 Collections.max 依赖元素自身的 自然顺序 或传入的 Comparator 进行比较,不基于数值大小、字符串长度或哈希值等隐式规则。
基于 Comparable 接口的自然顺序
当集合元素实现 Comparable 接口(如 Integer、String、LocalDate 等),且未传入 Comparator 时,方法调用 compareTo() 方法比较:
- Integer 按数值大小比较:Collections.min(Arrays.asList(3, 1, 4)) 返回 1
- String 按字典序比较:Collections.max(Arrays.asList("apple", "banana", "cat")) 返回 "cat"
- 若元素为 null 且无 Comparator,运行时抛出 NullPointerException
使用自定义 Comparator 显式指定规则
传入 Comparator 可覆盖默认行为,适用于无自然顺序的类或需按特定维度比较的场景:
- 按字符串长度找最长:Collections.max(list, Comparator.comparing(String::length))
- 按 Person.age 找年龄最大者:Collections.max(people, Comparator.comparing(p -> p.age))
- 支持链式比较:Comparator.comparing(Student::getGrade).thenComparing(Student::getName)
null 值与空集合的处理
这两个方法对边界情况有明确约定:
- 空集合(size == 0)直接抛出 NoSuchElementException
- 元素含 null 且使用自然顺序(即未传 Comparator),在调用 compareTo 时触发 NullPointerException
- 若 Comparator 显式允许 null(如 Comparator.nullsFirst 或 nullsLast),则可安全处理 null 元素
性能与适用范围
两者均为线性扫描(O(n) 时间复杂度),不改变原集合,也不要求集合有序:
- 适用于 List、Set、Queue 等任意 Collection 子类型(只要非空)
- 不支持基本类型数组,需先转为包装类型集合(如 int[] → Arrays.stream(arr).boxed().collect(Collectors.toList()))
- 若需多次查极值,考虑维护堆或排序;单次查询无需预处理
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











