在Java中如何使用Collections工具类_Java集合常用操作方法解析-java教程

Collections.sort()需传Comparator(如lambda或方法引用);unmodifiableXXX返回不可变视图而非深拷贝;synchronizedXXX仅保证单操作原子性,复合操作仍需手动同步;singletonXXX返回共享单例,非独立集合。

如何用 Collections.sort() 对自定义对象排序

直接调用 Collections.sort() 会抛 ClassCastException,除非你的类实现了 Comparable 接口。更常见也更灵活的做法是传入 Comparator 实现:

  • 用 lambda 表达式最简洁:Collections.sort(list, (a, b) -> Integer.compare(a.getAge(), b.getAge()));
  • Java 8+ 推荐用方法引用:Collections.sort(list, Comparator.comparing(Person::getAge));
  • 注意:sort() 只支持 List,对 Set 或 Map 的 value 需先转成 List
  • 如果 list 里有 null,默认比较器会抛 NullPointerException;可用 Comparator.nullsLast(Comparator.comparing(...)) 处理

Collections.unmodifiableXXX() 真的安全吗

它返回的是“不可变视图”,不是深拷贝。原集合一旦被修改,视图可能抛 ConcurrentModificationException,也可能读到脏数据。

  • Collections.unmodifiableList(list) 返回的 list 调用 add() 会立即抛 UnsupportedOperationException
  • 但若原 list 是可变的(比如 new ArrayList()),外部仍能通过原始引用修改它,视图同步可见
  • 真正防篡改需配合防御性拷贝:new ArrayList(originalList) 再套一层 unmodifiableList
  • 注意:unmodifiableMap 的 key 和 value 本身不被保护,只是 map 结构不可变

为什么 Collections.synchronizedXXX() 在高并发下仍可能出错

它只保证单个操作原子,不保证复合操作线程安全。比如 if (!list.isEmpty()) list.remove(0); 这种判断+操作,在多线程下依然存在竞态。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 在Java中如何使用Collections工具类_Java集合常用操作方法解析-java教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3996099+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3996099+
  • 本周更新: 0+
  • 最后更新: 2026-03-16