Collections.min和max用于获取集合极值,支持Comparable对象或自定义Comparator;示例中求数值最小最大值、字符串最长最短及Person按年龄取极值,需注意集合非空、元素可比较,性能O(n),多值并列时返回首个。

在Java中,Collections.min 和 Collections.max 是获取集合最小值和最大值的便捷方法。它们定义在 java.util.Collections 工具类中,适用于任何实现 Collection 接口的集合类型,如 ArrayList、LinkedList、HashSet 等。
基本用法:直接获取极值
对于存储实现了 Comparable 接口的元素(如 Integer、String)的集合,可以直接调用 min 或 max 方法。
- 使用
Collections.min(collection)获取最小值 - 使用
Collections.max(collection)获取最大值
示例:
Listnumbers = Arrays.asList(5, 2, 8, 1, 9); int min = Collections.min(numbers); // 结果为 1 int max = Collections.max(numbers); // 结果为 9
自定义比较规则:传入Comparator
当集合中的对象不具备自然排序,或你想按特定规则比较时,可以传入一个 Comparator 实现。
立即学习“Java免费学习笔记(深入)”;
- 例如,对字符串按长度排序取最长或最短
- 或对自定义对象(如 Person 按年龄)取极值
示例:找出最长的字符串
Listwords = Arrays.asList("hi", "hello", "world", "Java"); String shortest = Collections.min(words, Comparator.comparing(String::length)); String longest = Collections.max(words, Comparator.comparing(String::length)); // shortest = "hi", longest = "hello" 或 "world"(长度相同)
处理自定义对象的极值操作
假设有一个 Person 类,包含姓名和年龄,想找出年龄最小或最大的人。
class Person {
String name;
int age;
// 构造方法、getter等省略
}
使用 Comparator 按年龄比较:
Listpeople = Arrays.asList( new Person("Alice", 30), new Person("Bob", 25), new Person("Charlie", 35) ); Person youngest = Collections.min(people, Comparator.comparing(p -> p.age)); Person oldest = Collections.max(people, Comparator.comparing(p -> p.age));
注意事项与常见问题
使用这两个方法时需注意以下几点:
- 集合不能为空,否则抛出
NoSuchElementException - 元素必须可比较,要么实现
Comparable,要么提供Comparator - 若多个元素并列极值,返回其中任意一个(通常为首次出现)
- 性能为 O(n),适合中小规模数据
基本上就这些。掌握 Collections.min 和 max 能快速完成极值查询,结合 Comparator 更是灵活强大。不复杂但容易忽略细节,比如空集合判断,建议使用前先检查 collection.isEmpty()。










