Collections 是不可实例化的集合操作工具类,提供排序、查找、安全增强等静态方法;所有方法均通过 Collections.方法名() 调用,核心价值在于减少重复编码、提升可读性与效率。

Collections 工具类不是集合,而是一套开箱即用的集合操作“遥控器”。它不能被实例化,所有方法都通过 Collections.方法名() 直接调用,核心价值在于减少重复编码、提升代码可读性与运行效率。
排序与顺序控制(专为 List 设计)
这是日常开发中最常使用的功能,全部原地修改,不返回新集合:
-
自然排序:调用
Collections.sort(list),要求元素实现Comparable(如String、Integer); -
自定义排序:传入
Comparator,支持 Lambda 表达式,例如按字符串长度降序:Collections.sort(list, (a, b) -> b.length() - a.length()); -
反转顺序:
Collections.reverse(list)快速倒序,适合最新消息置顶等场景; -
随机打乱:
Collections.shuffle(list)基于默认随机源,适用于抽奖、题库抽题; -
交换元素:
Collections.swap(list, i, j)比手动临时变量更简洁安全; -
循环位移:
Collections.rotate(list, distance),正数向右滚(最后 n 个移到开头),负数向左滚。
查找与极值计算(注意前提条件)
这些方法看似简单,但用错前提会得到不可靠结果:
-
二分查找:必须先确保
List已升序排序,再调用Collections.binarySearch(list, key),否则返回值无意义; -
最大/最小值:
Collections.max(collection)和Collections.min(collection)支持任意Collection(List、Set、Queue),但空集合会抛出NoSuchElementException,建议判空后再调用; -
元素频次:
Collections.frequency(collection, obj)统计指定对象出现次数,适用于日志分析、数据清洗; -
批量填充:
Collections.fill(list, obj)将整个List元素设为同一值,常用于初始化或状态重置。
安全增强与不可变集合构建
应对多线程和防御性编程需求,Collections 提供轻量级包装方案:
立即学习“Java免费学习笔记(深入)”;
-
线程安全包装:如
Collections.synchronizedList(new ArrayList())返回同步代理,但遍历时仍需手动同步迭代块; -
不可变视图:
Collections.unmodifiableList(list)返回只读包装,任何add/remove操作都会立即抛UnsupportedOperationException; -
空/单元素集合:
emptyList()、singletonList("x")等返回不可变集合,内存高效且线程安全; -
JDK 9+ 替代建议:新项目优先使用
List.of()、Set.of(),语法更简、类型推导更强、默认不可变。
批量操作与便捷初始化
避免手写循环,提升开发效率:
-
批量添加:
Collections.addAll(list, "a", "b", 1, 2)支持可变参数,比多次add()更简洁; -
类型兼容性注意:像
addAll、max、min等方法适用于所有Collection;但sort、shuffle、reverse等仅限List; -
区分 Collection 与 Collections:前者是接口(如
List、Set的父接口),后者是工具类,名字多一个 “s” 就是本质区别。


















