Java Collections工具类提供静态方法简化集合操作,不创建实例,所有方法通过Collections.调用,核心价值是将重复逻辑压缩为一行代码。
Java Collections工具类不是集合本身,而是一套专为简化集合操作设计的静态方法集合。它不创建实例,所有方法都通过 Collections.方法名() 调用,核心价值在于把重复逻辑压缩成一行代码——不用手写循环、不用手动加锁、不用反复判空或校验顺序。
这类操作全部原地修改,不返回新集合,且仅适用于 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),底层用 Fisher-Yates 算法;单元测试中需可重现结果时,可传入带种子的 Random 实例:Collections.shuffle(list, new Random(42))
Collections.swap(list, i, j),比临时变量三行写法更简洁,但要注意索引越界会抛 IndexOutOfBoundsException
这些方法看似简单,但结果可靠性高度依赖集合当前状态:
Collections.binarySearch(list, key) 仅适用于已升序排列的 List;未排序时结果无效,不是慢,而是错。调用前必须显式排序,且多次查找应避免重复排序Collections.max(coll) 和 Collections.min(coll) 支持任意 Collection(List、Set、Queue),但空集合会抛 NoSuchElementException,建议先判空:!coll.isEmpty()
Collections.frequency(coll, obj) 可安全统计 null 出现次数,适用于去重前的数据分析,但大数据量时注意性能(内部仍是遍历)Collections.fill(list, obj) 会覆盖已有全部元素,要求 list 已初始化且非空;它不扩容,只写入已有位置这些方法返回的是原始集合的“包装视图”,不是深拷贝,使用时需理解其行为边界:
立即学习“Java免费学习笔记(深入)”;
Collections.unmodifiableList(list) 返回的视图禁止任何修改操作(add、remove、set),调用即抛 UnsupportedOperationException;但原始 list 若被其他引用修改,该视图仍能读到新内容Collections.synchronizedList(new ArrayList()) 保证单个方法(如 get、add)原子性,但复合操作(如“检查是否存在再添加”)仍需外部同步块:synchronized(list) { ... }
Collections.emptyList()、Collections.singletonList("x") 是内存共享、线程安全的单例,比 new ArrayList() 更高效;JDK 9+ 推荐优先用 List.of()、Set.of() 替代几个极易忽略却影响深远的细节:
List、Set 的父接口),后者是工具类,拼写多一个 “s” 就完全不是一回事addAll、max、min 适用于所有 Collection;但 sort、shuffle、reverse 等仅限 List
sort、reverse、shuffle 等)返回类型都是 void,直接改变原集合;若需保留原数据,请提前复制replaceAll() 中的 UnaryOperator 不应修改对象内部状态,否则可能破坏集合一致性;fill() 对泛型类型敏感,填入不兼容类型可能引发运行时异常