Java中的Collections工具类提供丰富的静态方法操作集合。1. 排序与反转:sort()按自然顺序或比较器排序,reverse()反转列表。2. 查找与替换:max()/min()找最值,frequency()统计元素频次,replaceAll()替换元素。3. 同步控制:synchronizedList/Set/Map()创建线程安全集合,遍历时需手动同步。4. 不可变集合:unmodifiableList/Set/Map()生成只读集合。5. 其他方法:fill()填充列表,copy()复制列表,swap()交换两元素,rotate()循环移动元素。熟练使用可提升开发效率与代码安全性。

Java中的Collections工具类是集合操作的实用类,位于java.util包中,提供了大量静态方法用于操作或返回集合。它能帮助开发者更方便地对List、Set、Map等集合进行排序、查找、同步控制等操作。以下是常用方法的整理和说明。
排序与反转
Collections提供了对List进行排序和反转的方法:
- sort(List<T> list):根据元素的自然顺序对List进行升序排序。要求元素实现Comparable接口。
- sort(List<T> list, Comparator<? super T> c):根据指定比较器进行排序,适合自定义排序规则。
- reverse(List<?> list):反转List中元素的顺序。
例如,对字符串List按字母逆序排列:
List<String> words = Arrays.asList("banana", "apple", "cherry");Collections.sort(words); // 自然排序
Collections.reverse(words); // 反转
查找与替换
该类提供了一些常用的查找和替换操作:
立即学习“Java免费学习笔记(深入)”;
- max(Collection<?> coll) 和 min(Collection<?> coll):返回集合中的最大或最小元素,依据自然顺序。
- max(Collection<?> coll, Comparator<? super T> comp):使用自定义比较器查找最值。
- replaceAll(List<?> list, T oldVal, T newVal):将List中所有指定旧值替换为新值。
- frequency(Collection<?> c, Object o):返回集合中指定元素出现的次数。
比如统计某个数字在List中出现多少次:
List<Integer> nums = Arrays.asList(1, 2, 2, 3, 2);int count = Collections.frequency(nums, 2); // 返回3
同步控制与不可变集合
在多线程环境下,可以使用Collections提供的同步包装方法:
- synchronizedList(List<T> list):返回一个线程安全的List。
- synchronizedSet(Set<T> s):返回线程安全的Set。
- synchronizedMap(Map<K,V> m):返回线程安全的Map。
注意:获取迭代器时仍需手动同步:
List<String> syncList = Collections.synchronizedList(new ArrayList<>());synchronized(syncList) {
Iterator<String> it = syncList.iterator();
while (it.hasNext()) { /* 遍历 */ }
}
此外,可用unmodifiableList、unmodifiableSet、unmodifiableMap创建只读集合,防止修改。
其他实用方法
- fill(List<? super T> list, T obj):用指定元素替换List中所有元素。
- copy(List<? super T> dest, List<? extends T> src):将源List内容复制到目标List,目标List大小不能小于源List。
- swap(List<?> list, int i, int j):交换List中两个位置的元素。
- rotate(List<?> list, int distance):将List中的元素向右循环移动指定距离。
例如旋转列表:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);Collections.rotate(list, 2); // 结果为 [4, 5, 1, 2, 3]
基本上就这些。掌握这些方法能显著提升集合操作效率,减少手动编码出错的可能。










