最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java Collections工具类教程:集合操作标准实践
时间:2026-06-20 09:58:47 编辑:袖梨 来源:一聚教程网
Java Collections工具类提供静态方法简化集合操作,不创建实例,所有方法通过Collections.调用,核心价值是将重复逻辑压缩为一行代码。
Java Collections工具类不是集合本身,而是一套专为简化集合操作设计的静态方法集合。它不创建实例,所有方法都通过 Collections.方法名() 调用,核心价值在于把重复逻辑压缩成一行代码——不用手写循环、不用手动加锁、不用反复判空或校验顺序。
排序与顺序控制:只对List生效,必须注意前提
这类操作全部原地修改,不返回新集合,且仅适用于 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()替代
高频避坑提醒:名字、类型、副作用一个都不能错
几个极易忽略却影响深远的细节:
-
Collection ≠ Collections:前者是接口(如
List、Set的父接口),后者是工具类,拼写多一个 “s” 就完全不是一回事 -
方法作用域不同:
addAll、max、min适用于所有Collection;但sort、shuffle、reverse等仅限List -
原地操作无返回值:所有修改类方法(
sort、reverse、shuffle等)返回类型都是void,直接改变原集合;若需保留原数据,请提前复制 -
替换与填充注意副作用:
replaceAll()中的UnaryOperator不应修改对象内部状态,否则可能破坏集合一致性;fill()对泛型类型敏感,填入不兼容类型可能引发运行时异常
相关文章
- 觅长生气道找谁 06-22
- 国家电网招聘报名官网入口 - 2026年校园招聘通道 06-22
- diskgenius不能快速分区解决方法 06-22
- 天猫营销策略全解析 - 2026最新运营方法论 06-22
- Canva可画网页版在线设计工具 - 免费使用无需下载 06-22
- 酷狗唱唱的歌怎样保存在手机上 06-22