一、核心作用与定义
Collections
类是Java集合框架的核心工具类,位于java.util
包中,提供了一系列静态方法用于操作List、Set、Map等集合。其核心作用包括:
- 简化集合操作:如排序、搜索、反转、填充等。
- 线程安全支持 :通过同步包装器(如
synchronizedList
)实现线程安全。 - 不可变集合创建:提供方法生成不可修改的集合视图。
- 算法复用:封装常见集合操作算法,避免重复实现。

二、常用方法详解
1. 排序相关
-
sort(List<T> list)
按自然顺序升序排序列表,要求元素实现
Comparable
接口。javaList<Integer> numbers = Arrays.asList(4, 2, 5, 1, 3); Collections.sort(numbers); // 输出 [1, 2, 3, 4, 5]
-
sort(List<T> list, Comparator<? super T> c)
按指定比较器排序,支持自定义排序逻辑。
javaComparator<Integer> descComparator = (a, b) -> b - a; Collections.sort(numbers, descComparator); // 降序排序
2. 反转与随机打乱
-
reverse(List<?> list)
反转列表元素顺序。
javaList<String> fruits = Arrays.asList("apple", "banana", "cherry"); Collections.reverse(fruits); // 输出 [cherry, banana, apple]
-
shuffle(List<?> list)
随机打乱列表元素(默认使用随机源)。
javaCollections.shuffle(fruits); // 输出顺序随机,如 [banana, apple, cherry]
3. 搜索与替换
-
binarySearch(List<?> list, T key)
二分搜索,要求列表已排序。
javaCollections.sort(numbers); int index = Collections.binarySearch(numbers, 4); // 返回索引3
-
replaceAll(List<T> list, T oldVal, T newVal)
替换所有旧值为新值。
javaList<String> words = Arrays.asList("hello", "world", "java"); Collections.replaceAll(words, "java", "javafx"); // 输出 [hello, world, javafx]
4. 极值查找
-
min(Collection<? extends T> coll)
返回集合最小元素。
javaList<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9); int min = Collections.min(numbers); // 输出1
-
max(Collection<? extends T> coll)
返回集合最大元素。
javaint max = Collections.max(numbers); // 输出9
5. 集合修改
-
fill(List<? super T> list, T obj)
用指定元素填充列表。
javaList<String> list = new ArrayList<>(Arrays.asList("a", "b", "c")); Collections.fill(list, "x"); // 输出 [x, x, x]
-
copy(List<? super T> dest, List<? extends T> src)
复制源列表到目标列表(目标需足够长)。
javaList<String> src = Arrays.asList("sun", "moon", "star"); List<String> dest = new ArrayList<>(Arrays.asList("", "", "")); Collections.copy(dest, src); // 输出 [sun, moon, star]
6. 不可变集合
-
unmodifiableList(List<? extends T> list)
返回不可修改的列表视图,修改会抛出UnsupportedOperationException
。javaList<String> original = new ArrayList<>(Arrays.asList("one", "two")); List<String> unmodifiable = Collections.unmodifiableList(original); // unmodifiable.add("three"); // 抛出异常
7. 其他实用方法
-
frequency(Collection<?> c, Object o)
统计元素出现次数。
javaList<String> items = Arrays.asList("apple", "banana", "apple"); int count = Collections.frequency(items, "apple"); // 输出2
-
rotate(List<?>, int distance)
循环移动元素(正数右移,负数左移)。
javaList<Integer> list = Arrays.asList(1, 2, 3, 4, 5); Collections.rotate(list, 2); // 输出 [4, 5, 1, 2, 3]
三、Java 11新增特性
1. 集合工厂方法
-
List.of()
、Set.of()
、Map.of()
快速创建不可变集合,支持1-10个元素的显式声明。
javaList<String> list = List.of("Alice", "Bob", "Charlie"); // Java 11新增 Set<Integer> set = Set.of(1, 2, 3); Map<String, Integer> map = Map.of("Alice", 25, "Bob", 30);
-
copyOf()
复制集合为不可变形式,适用于已有集合。
javaList<String> original = new ArrayList<>(Arrays.asList("a", "b")); List<String> copied = List.copyOf(original); // 返回不可变列表
2. 方法增强
-
indexOfSubList(List<?>, List<?>)
查找子列表首次出现的位置。javaList<Integer> list = Arrays.asList(1, 2, 3, 4, 5); List<Integer> subList = Arrays.asList(3, 4); int index = Collections.indexOfSubList(list, subList); // 返回2
四、与Java 8的差异
1. 默认垃圾收集器变更
- Java 11:默认使用G1 GC,优化低延迟场景,支持并发压缩和动态堆调整。
- Java 8:默认使用Parallel GC,强调高吞吐量。
2. 集合API扩展
- Java 11 新增集合工厂方法(如
List.of()
),简化不可变集合创建。 - Java 8 需通过
Collections.unmodifiableList
手动包装。
3. 语言特性影响
-
Java 11 支持局部变量类型推断(
var
),但Collections
方法参数仍需显式类型。javavar list = List.of("a", "b"); // 有效 Collections.sort(var list); // 无效,需显式类型
五、最佳实践建议
-
线程安全
使用同步包装器保护非线程安全集合:
javaList<String> syncList = Collections.synchronizedList(new ArrayList<>());
-
不可变集合
优先使用
List.of()
或Collections.unmodifiableList
避免意外修改,提升代码安全性。 -
性能优化
- 对大列表使用G1 GC,调整堆参数(如
-XX:G1HeapRegionSize
)。 - 避免在频繁修改的集合上使用不可变视图。
- 对大列表使用G1 GC,调整堆参数(如
-
算法选择
根据场景选择合适方法:
- 自然顺序排序用
sort(List)
,自定义排序用sort(List, Comparator)
。 - 查找极值时,优先使用
min()
/max()
而非遍历。
- 自然顺序排序用
六、总结
Java 11的Collections
类在保持核心功能稳定的同时,通过新增工厂方法和增强现有方法,提升了开发效率和代码简洁性。用户应结合具体场景选择合适方法,并注意版本差异对代码的影响,尤其是垃圾收集器和集合API的变化。