Collections工具类是专为集合提供静态操作方法的辅助类,不存储数据,仅简化List、Set等集合的排序、查找、安全增强等常见操作,使用时需严格满足前提条件。

Collections工具类不是集合本身,而是一套专为集合服务的“操作遥控器”。它不存储数据,只提供静态方法来简化、加固和加速List、Set等集合的常见操作。用对了,代码更短、更安全、更高效;用错了,比如在未排序的List上调binarySearch,结果就不可信。
排序与顺序调整:专注List,注意前提
所有排序和顺序类方法(sort、reverse、shuffle、rotate、swap)都只作用于List,不能用于Set或Map。它们都是原地修改、无返回值,直接改变原集合。
- 自然排序用Collections.sort(list),要求元素实现Comparable(如String、Integer)
- 自定义排序传Comparator,例如按长度降序:Collections.sort(list, (a, b) -> b.length() - a.length())
- Collections.reverse(list)高效翻转,比手写循环快且语义清晰
- Collections.shuffle(list)适合随机抽样或测试数据生成;如需可重现结果,可传入指定Random实例
- Collections.rotate(list, 2)把最后2个元素移到开头,比拆分+拼接更简洁
查找与极值:状态依赖强,务必校验
这类方法对集合状态敏感,调用前必须确认前提条件,否则行为未定义。
- Collections.binarySearch(list, key)仅适用于已升序排序的List;未排序时结果无效,不是慢,而是错
- Collections.max(coll)和Collections.min(coll)支持任意Collection,但空集合会抛NoSuchElementException,建议配合coll.isEmpty()判断
- Collections.frequency(coll, element)统计出现次数,适用于List或Set,内部遍历,大数据量慎用
安全增强:包装不等于万全,遍历仍需加锁
unmodifiable和synchronized系列方法返回的是原始集合的包装视图,不是新集合,也不解决复合操作的竞态问题。
- Collections.unmodifiableList(list)返回只读视图,任何add/remove操作立即抛UnsupportedOperationException,适合配置类或API返回值
- Collections.synchronizedList(new ArrayList())让基础操作线程安全,但迭代块(如for-each)仍需外部同步:synchronized(list) { ... }
- 优先使用Collections.emptyList()代替new ArrayList(),复用单例,避免空集合重复创建
批量操作与轻量构造:减少样板,提升可读
这些方法省去循环和判空逻辑,让意图更明确。
- Collections.addAll(list, "a", "b", 1, 2)一行完成多个元素添加,比连续调用add简洁
- Collections.replaceAll(list, oldVal, newVal)批量替换,比遍历+if更直观
- Collections.singletonList("only")和Collections.singleton("one")创建不可变单元素集合,开销极小,适合常量场景
- Collections.nCopies(5, "x")生成含5个"x"的不可变List,适合初始化默认值
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











