collections 是 java 集合操作的工具类,提供静态方法实现排序、查找、统计、安全包装等功能,不存储数据,仅操作 collection 及其子接口,对 map 需间接处理。

Collections 是 Java 集合操作的“核心扳手”——它不存数据,专干脏活累活:排序、找最大最小、反转洗牌、统计频次、包装安全视图。所有方法都是静态的,直接用 Collections.xxx() 调用,无需 new,也不依赖具体实现类,只认 Collection 及其子接口(List/Set/Queue),对 Map 则需配合 keySet()/values() 等间接操作。
排序与顺序控制(List 专属)
这类方法只接受 List,因为顺序是 List 的本质特征。
-
自然排序:元素必须实现
Comparable(如 String、Integer),调用Collections.sort(list)升序排列; -
自定义排序:传入
Comparator,比如按字符串长度升序:Collections.sort(words, Comparator.comparing(String::length)); -
反转:
Collections.reverse(list)倒序,常用于把升序变降序; -
洗牌:
Collections.shuffle(list)随机打乱,适合抽奖、测试数据生成; -
交换元素:
Collections.swap(list, i, j)快速置换两个位置,比手动临时变量更简洁。
查找与统计(支持所有 Collection)
这些方法不限于 List,Set、Queue、甚至 LinkedHashSet 都能用。
-
找极值:
Collections.max(c)和Collections.min(c)返回自然顺序下的最值;带 Comparator 版本可灵活定义规则,例如找最长字符串:Collections.max(words, Comparator.comparing(String::length)); -
统计频次:
Collections.frequency(collection, obj)返回指定元素在集合中出现次数,适用于日志分析、词频统计等场景; -
二分查找:
Collections.binarySearch(sortedList, key)要求 list 已升序(或按同一 Comparator 排序),否则结果不可靠;时间复杂度 O(log n),比线性遍历快得多。
安全与不可变包装(防御性编程关键)
不是修改原集合,而是返回一个“受控视图”,原集合仍可变,但视图拒绝写操作或加锁。
-
不可修改视图:
Collections.unmodifiableList(list)等方法返回只读代理,任何 add/remove 操作都抛UnsupportedOperationException,适合暴露给外部模块时防止误改; -
同步包装:
Collections.synchronizedList(list)返回线程安全版本,内部加 synchronized 锁,适用于低并发简单场景;高并发建议直接用CopyOnWriteArrayList或ConcurrentHashMap; -
空集合常量:
Collections.emptyList()、emptySet()、emptyMap()返回不可变、无内存开销的单例空集合,比new ArrayList()更轻量且线程安全。
复制与批量操作(注意边界陷阱)
看似简单,但容易踩坑,务必看清参数约束。
-
集合复制:
Collections.copy(dest, src)要求dest.size() >= src.size(),否则抛IndexOutOfBoundsException;推荐替代方案:new ArrayList(src)或dest.addAll(src); -
批量替换:
Collections.replaceAll(list, oldVal, newVal)替换所有匹配项,注意引用相等(equals()判定),适用于状态切换(如将所有 "PENDING" 改为 "PROCESSED"); -
填充:
Collections.fill(list, obj)将整个 list 元素设为同一对象,适合初始化默认值(如全填null或0)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











