collections工具类提供静态方法简化集合操作:排序、查找、安全封装等;仅支持list的排序需元素可比较或传comparator;binarysearch要求已排序;max/min需非空;unmodifiablelist等返回轻量视图;addall、swap、fill减少样板代码;copy需目标容量足够。

Collections 工具类是 Java 集合操作的“快捷键”,它不存数据、不占实例,只提供一整套静态方法,帮你省掉大量循环和判断代码。用对了,排序、查找、安全封装几行搞定;用错了,比如在没排序的 List 上调 binarySearch,结果就不可信。
排序与顺序控制(List专属)
这类操作只支持 List,全部原地修改,不返回新集合:
-
自然排序:直接
Collections.sort(list),要求元素实现Comparable(如String、Integer);否则运行时报ClassCastException -
自定义排序:传 Comparator,支持 Lambda,例如按字符串长度降序:
Collections.sort(list, (a, b) -> b.length() - a.length()) -
反转顺序:
Collections.reverse(list),适合翻页展示或倒序输出场景 -
随机打乱:
Collections.shuffle(list),默认使用系统随机源;测试时需可重现,可传入指定种子的Random对象:Collections.shuffle(list, new Random(123)) -
循环位移:
Collections.rotate(list, 2)将最后 2 个元素移到开头,负数表示向左滚动
查找与极值计算(通用+前提明确)
部分方法适用于所有 Collection,但结果可靠性高度依赖前提条件:
-
二分查找:必须先确保 List 已按相同规则排序,再调
Collections.binarySearch(list, key);未找到时返回负插入点(如 -4 表示应插入索引 3),不是简单判 -1 -
最大/最小值:
Collections.max(coll)和Collections.min(coll)支持 List、Set、Queue;空集合会抛NoSuchElementException,建议先!coll.isEmpty()判空 -
频次统计:
Collections.frequency(coll, obj)直接返回指定元素出现次数,适用于日志分析、去重前计数等场景
安全包装与不可变构造(生产必备)
这些方法返回的是原始集合的“视图”,不是副本,内存轻量且线程友好:
-
不可修改视图:
Collections.unmodifiableList(list)返回只读包装,任何 add/set/clear 都立即抛UnsupportedOperationException -
空/单元素集合:
Collections.emptyList()、Collections.singletonList("x")比new ArrayList()更高效,推荐用于 API 返回值或常量初始化 -
线程安全包装:
Collections.synchronizedList(list)给非线程安全集合加锁,但迭代时仍需手动同步:synchronized(list) { for (… ) { … } } -
JDK 9+ 建议:优先用
List.of()、Set.of()替代singletonList或emptyList,语法更简、类型推导更强、默认不可变
批量操作与便捷初始化(减少样板代码)
避免手写 for 循环,提升可读性与健壮性:
-
批量添加:
Collections.addAll(list, "a", "b", 1, 2),一行完成多个元素追加,支持可变参数 -
交换元素:
Collections.swap(list, i, j),比临时变量三行代码更简洁,注意索引越界会抛异常 -
填充统一值:
Collections.fill(list, "default"),常用于初始化状态列表或重置缓存 -
拷贝注意坑:
Collections.copy(dest, src)要求 dest 容量 ≥ src,否则报IndexOutOfBoundsException;日常建议直接用new ArrayList(src)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











