ArrayList是List接口的实现类,支持基本增删改查;Collections是工具类,提供排序(sort、reverse)、查找(max/min/frequency)、不可变包装(unmodifiableList)、线程安全包装(synchronizedList)、填充(fill)、打乱(shuffle)和拷贝(copy)等静态方法。

ArrayList 本身是 List 接口的实现类,支持增删改查等基本操作;而 Collections 是一个工具类,提供大量静态方法,用于对集合(包括 ArrayList)进行排序、查找、同步、不可变包装等高级操作。它不直接“操作” ArrayList 的内部结构,而是通过传入 ArrayList 实例来执行通用集合算法。
排序与反转
对 ArrayList 中的元素进行排序或倒序,需确保元素实现了 Comparable 接口(如 String、Integer),或传入自定义 Comparator:
- Collections.sort(list):升序排列(原地修改)
- Collections.sort(list, Comparator.reverseOrder()):降序排列
- Collections.reverse(list):直接反转列表顺序(不比较,仅调换位置)
例如:
List<String> list = new ArrayList<>(Arrays.asList("c", "a", "b"));
Collections.sort(list); // → ["a", "b", "c"]
Collections.reverse(list); // → ["c", "b", "a"]
查找与替换
Collections 提供了便捷的查找和批量替换方法:
- Collections.max(list) / Collections.min(list):返回最大/最小元素(要求元素可比较)
- Collections.frequency(list, "x"):统计指定元素出现次数
- Collections.replaceAll(list, "old", "new"):将所有匹配项替换为新值
注意:这些方法不改变 ArrayList 的结构(如扩容),只读或做值替换。
立即学习“Java免费学习笔记(深入)”;
创建不可变或线程安全版本
为保障数据安全或并发正确性,可用 Collections 包装原始 ArrayList:
- Collections.unmodifiableList(list):返回只读视图,任何修改操作(add/remove/set)都会抛 UnsupportedOperationException
- Collections.synchronizedList(list):返回线程安全的代理对象,所有方法加 synchronized(适合简单场景,高并发建议用 CopyOnWriteArrayList)
⚠️ 注意:这两个方法返回的是新包装对象,原 ArrayList 仍可修改;若要彻底保护,应避免暴露原始引用。
填充、打乱与拷贝
适用于初始化或随机化场景:
- Collections.fill(list, "value"):将列表所有位置设为同一值(要求 list 已有元素)
- Collections.shuffle(list):使用默认随机源打乱顺序(常用于抽奖、随机展示)
- Collections.copy(dest, src):将 src 元素复制到 dest,要求 dest 长度 ≥ src 长度
例如:
List<Integer> data = Arrays.asList(1, 2, 3);
Collections.fill(data, 0); // ❌ 报错!asList 返回不可变list
List<Integer> mutable = new ArrayList<>(data);
Collections.fill(mutable, 0); // ✅ [0, 0, 0]


















