collections.sort等操作直接修改原list且无返回值:自然排序要求元素实现comparable,自定义排序传comparator(如按字符串长度降序),reverse反转、shuffle随机打乱(可指定random种子)、swap交换、rotate循环位移。

排序与顺序调整(仅List)
这些操作直接修改原List,不生成新集合,也不返回值。
-
自然排序:调用Collections.sort(list),要求元素实现
Comparable(如String、Integer),否则运行时报ClassCastException -
自定义排序:传入
Comparator,支持Lambda表达式,例如按字符串长度降序:Collections.sort(list, (a, b) -> b.length() - a.length()) -
反转顺序:Collections.reverse(list)将
[1,2,3]变为[3,2,1],适合倒序展示或栈式访问 -
随机打乱:Collections.shuffle(list)基于系统随机源;测试需可重现时,应传入带种子的
Random:Collections.shuffle(list, new Random(42)) -
交换元素:Collections.swap(list, i, j)高效互换两个索引位置的值,注意索引越界会抛
IndexOutOfBoundsException -
循环位移:Collections.rotate(list, distance),正数向右滚(最后
n个移到开头),负数向左滚
查找与极值计算(通用Collection)
部分方法适用于所有Collection子类(List、Set、Queue等),但前提条件必须满足,否则结果不可靠或直接抛异常。
-
二分查找:仅对已排序的List有效,且排序规则须与查找一致;调用Collections.binarySearch(list, key),未找到时返回负插入点(如
-4表示应插入索引3),不能简单用== -1判断失败 -
最大/最小值:Collections.max(coll)和Collections.min(coll)支持任意Collection;若元素无自然序(如未实现
Comparable的自定义对象),必须显式传Comparator;空集合会抛NoSuchElementException,建议先判空 -
频次统计:Collections.frequency(coll, obj)直接返回指定对象在集合中出现次数,支持
null比较,适用于日志分析、数据预处理等场景
批量操作与内容填充(List为主)
减少手写循环,提升初始化与批量修改效率,所有操作均作用于原集合。
-
批量添加:Collections.addAll(coll, elements...)支持可变参数,比循环
add()更简洁,推荐用于初始化 -
全部填充:Collections.fill(list, obj)将列表每个位置设为同一对象(如全填
null或默认值),常用于重置状态 -
批量替换:Collections.replaceAll(list, oldVal, newVal)替换所有匹配项,支持
null参与比较 -
集合拷贝:Collections.copy(dest, src)要求
dest.size() ≥ src.size(),否则抛IndexOutOfBoundsException;日常建议改用new ArrayList(src)替代
安全增强与不可变封装(生产必备)
返回的是原始集合的“包装视图”,非深拷贝,内存轻量、线程友好,但行为受原始集合影响。
-
不可修改视图:Collections.unmodifiableList(list)等方法返回只读包装,任何
add/set/clear操作立即抛UnsupportedOperationException -
空/单元素集合:Collections.emptyList()、Collections.singletonList("x")比
new ArrayList()更高效,线程安全,推荐用于API返回值或配置常量 -
线程安全包装:Collections.synchronizedList(list)为非线程安全集合加同步锁,但遍历时仍需手动同步迭代块(如
synchronized(list) { for(...) {...} }) -
JDK 9+ 建议:新项目优先使用
List.of()、Set.of(),语法更简,类型推导更强,且默认不可变
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











