Collections.max和min用于查找集合最值,需元素实现Comparable或传入Comparator;示例包括Integer、String及自定义对象Person按年龄比较,使用时注意集合非空非null,否则抛异常。

在Java中,Collections.max 和 Collections.min 是用于查找集合中最大值和最小值的便捷方法。它们属于 java.util.Collections 类,适用于实现了 Collection 接口的类(如 List、Set 等)。使用这两个方法的前提是集合中的元素必须是可比较的。
1. 基本用法:元素实现 Comparable 接口
如果集合中的元素类型已经实现了 Comparable 接口(如 Integer、String、Date 等),可以直接调用 Collections.max 和 Collections.min。
- max 返回集合中“最大”的元素(根据自然排序)
- min 返回集合中“最小”的元素
示例代码:
import java.util.*; Listnumbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2); System.out.println("最大值: " + Collections.max(numbers)); // 输出 9 System.out.println("最小值: " + Collections.min(numbers)); // 输出 1 List words = Arrays.asList("apple", "banana", "cherry"); System.out.println("最大值: " + Collections.max(words)); // 按字典序输出 cherry System.out.println("最小值: " + Collections.min(words)); // 输出 apple
2. 自定义比较规则:使用 Comparator
当需要自定义排序规则时,可以传入一个 Comparator 作为第二个参数。
立即学习“Java免费学习笔记(深入)”;
示例:按字符串长度找最长和最短的字符串
Listwords = Arrays.asList("hi", "hello", "hey", "greetings"); String longest = Collections.max(words, Comparator.comparing(String::length)); String shortest = Collections.min(words, Comparator.comparing(String::length)); System.out.println("最长: " + longest); // 输出 greetings System.out.println("最短: " + shortest); // 输出 hi
3. 注意事项和常见问题
使用这些方法时需要注意以下几点:
- 集合不能为 null,否则抛出 NullPointerException
- 集合不能为空,否则抛出 NoSuchElementException
- 元素之间必须能相互比较,否则可能抛出 ClassCastException
- 对于自定义对象,要么实现 Comparable 接口,要么提供 Comparator
自定义对象示例:
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
List people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
// 找年龄最大的人
Person oldest = Collections.max(people, Comparator.comparing(p -> p.age));
// 找年龄最小的人
Person youngest = Collections.min(people, Comparator.comparing(p -> p.age));
基本上就这些。只要元素可比较,无论是自然顺序还是自定义规则,都能方便地使用 max 和 min 方法。










