Java Collections工具类提供静态方法操作集合,核心包括:排序需元素可比或传Comparator;二分查找要求列表有序且比较器一致;极值、反转、打乱等轻量操作;不可变和同步包装视图保障安全。

Java Collections 工具类是开发者日常操作集合的得力助手,它不管理数据本身,而是提供一组静态方法,直接作用于已有的 List、Set 等集合对象。掌握它的核心方法,关键在于理解每个操作的前提条件和行为边界——比如排序必须可比、查找必须有序、不可变视图无法绕过限制。
排序:自然顺序与自定义规则并存
排序是最常用的操作,但两种 sort 方法有本质区别:
-
自然排序(
Collections.sort(list))要求元素实现Comparable接口,例如Integer、String默认按数值或字典序升序排列;若传入自定义类型且未实现compareTo,运行时抛出ClassCastException。 -
自定义排序(
Collections.sort(list, comparator))完全绕过接口约束,靠传入的Comparator定义逻辑。常见写法包括 Lambda 表达式:(a, b) -> a.length() - b.length()(按字符串长度升序),或使用内置比较器如Comparator.reverseOrder()实现降序。
注意:该方法直接修改原 List,不返回新集合;底层采用 TimSort,兼顾性能与稳定性。
二分查找:快但有硬性前提
Collections.binarySearch 效率高(O(log n)),但依赖两个刚性条件:
立即学习“Java免费学习笔记(深入)”;
- 列表必须已按升序排列(无论是自然顺序还是用同一
Comparator排过序); - 查找键与列表元素类型需兼容——若用自定义
Comparator排序,则必须用相同比较器调用binarySearch的三参数重载版本,否则结果不可靠。
返回值不是简单的布尔值:找到时返回索引(≥0);未找到时返回 -(insertion point) - 1,这个负数可用于定位插入位置,避免重复扫描。
极值与顺序变换:轻量但实用
无需排序即可快速获取信息或调整结构:
-
找最大最小值:
Collections.max(list)和Collections.min(list)直接遍历,时间复杂度 O(n),支持传入Comparator定制标准; -
反转与打乱:
reverse是原地翻转,shuffle使用默认随机源(Random)随机置换,适合模拟抽签、洗牌等场景; -
交换与轮换:
swap(list, i, j)交换两个索引位置的元素;rotate(list, distance)将列表视为环形,右移distance位(负数表示左移),常用于数组循环移动。
安全封装:不可变与线程同步
面对共享数据场景,Collections 提供“包装”能力而非复制:
-
不可修改视图:
Collections.unmodifiableList(list)返回一个代理对象,任何修改操作(add、set、clear 等)都抛出UnsupportedOperationException,适合暴露只读接口; -
线程安全包装:
Collections.synchronizedList(list)为方法加 synchronized 锁,但仅保证单个操作原子性——遍历时仍需手动同步块,否则可能抛出ConcurrentModificationException。
这类方法返回的是原始集合的“视图”,底层数据仍被共享,变更会反映在所有视图上。


















