📝 摘要

Java 的集合框架(List、Map、Set)几乎无处不在,尤其在老项目中更是“万金油”工具。然而,很多初学者在刚接触这些集合类时容易混淆用法,甚至在维护老代码时出现误用、性能问题或逻辑错误。

本篇文章将以一个正在回写老项目的开发者视角,详细梳理 List、Map 和 Set 在实际项目中的典型用法、使用场景、常见坑点以及最佳实践。文章适合 Java 初学者阅读,也为有经验的开发者提供复盘与优化的参考。

博主 默语带您 Go to New World.
个人主页—— 默语 的博客👦🏻 优秀内容
《java 面试题大全》
《java 专栏》
《idea技术专区》
《spring boot 技术专区》
《MyBatis从入门到精通》
《23种设计模式》
《经典算法学习》
《spring 学习》
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨


默语是谁?

大家好,我是 默语,别名默语博主,擅长的技术领域包括Java、运维和人工智能。我的技术背景扎实,涵盖了从后端开发到前端框架的各个方面,特别是在Java 性能优化、多线程编程、算法优化等领域有深厚造诣。

目前,我活跃在CSDN、掘金、阿里云和 51CTO等平台,全网拥有超过15万的粉丝,总阅读量超过1400 万。统一 IP 名称为 默语 或者 默语博主。我是 CSDN 博客专家、阿里云专家博主和掘金博客专家,曾获博客专家、优秀社区主理人等多项荣誉,并在 2023 年度博客之星评选中名列前 50。我还是 Java 高级工程师、自媒体博主,北京城市开发者社区的主理人,拥有丰富的项目开发经验和产品设计能力。希望通过我的分享,帮助大家更好地了解和使用各类技术产品,在不断的学习过程中,可以帮助到更多的人,结交更多的朋友.


我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

默语:您的前沿技术领航员

👋 大家好,我是默语
📱 全网搜索“默语”,即可纵览我在各大平台的知识足迹。

📣 公众号“默语摸鱼”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。

💬 微信端添加好友“Solitudemind”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。

📅 最新动态:2025 年 4 月 7 日

快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


在这里插入图片描述

Java 集合框架实战:老项目中 List、Map、Set 的最佳实践

📌 作者:默语
📅 日期:2025年4月7日
🏷️ 标签:Java、集合框架、List、Map、Set、开发实践、Eclipse、Java基础



📖 引言:为何集合类如此重要?

集合类是 Java 中用于存储一组数据的核心组件。相比数组,它们具有:

  • 更强的扩展性(动态扩容)
  • 更丰富的操作方法(如排序、查找、过滤)
  • 更好的抽象封装(面向接口编程)

但也正因为选择多样,我们更需要明确使用场景和每个集合的优势,避免“能跑就行”的临时写法埋下后期维护的雷。


🧱 基础知识回顾:List、Set、Map 的区别

特性/类型 List Set Map
是否允许重复元素 ✅ 允许 ❌ 不允许 ✅ 允许重复 value,❌ key 唯一
是否有序 ✅ 保持插入顺序 依实现类而定(HashSet 无序,TreeSet 有序) 依实现类而定(HashMap 无序,LinkedHashMap 有序)
典型实现类 ArrayList, LinkedList HashSet, TreeSet HashMap, LinkedHashMap

🔍 List 实战:ArrayList 与 LinkedList 的取舍

✅ 推荐使用场景

  • 需要维护元素顺序
  • 频繁查找、遍历场景(推荐 ArrayList
  • 频繁插入/删除操作(推荐 LinkedList

✍️ 代码示例

List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Alice"); // 允许重复
System.out.println(names); // [Alice, Bob, Alice]

💡 小贴士

  • 使用 ArrayList 大多数时候性能更优;
  • 初始化时设定容量可提升性能:new ArrayList<>(100)
  • 遍历时建议用增强 for 循环或 stream(更安全);
  • 注意:并发修改时需使用 CopyOnWriteArrayList 或加锁。

🧩 Set 实战:如何实现数据去重

✅ 推荐使用场景

  • 元素必须唯一(如用户ID、标签、关键词等)
  • 需要集合操作(交集、并集、差集)
  • 无需关注元素顺序(用 HashSet

✍️ 代码示例:简单去重

Set<String> tags = new HashSet<>();
tags.add("Java");
tags.add("Spring");
tags.add("Java"); // 自动去重
System.out.println(tags); // 输出可能是 [Spring, Java]

✍️ 代码示例:有序去重

Set<String> tags = new TreeSet<>();
tags.add("Java");
tags.add("Spring");
tags.add("Java");
System.out.println(tags); // [Java, Spring],按字典序排序

💡 小贴士

  • HashSet 基于 HashMap 实现,性能较高;
  • 如果你需要按添加顺序保留,用 LinkedHashSet
  • 若元素是对象,请重写 equals()hashCode() 方法,避免去重失败。

🗺️ Map 实战:用键值对结构优化代码逻辑

✅ 推荐使用场景

  • 快速通过 key 找 value(如配置表、缓存表)
  • 替代 if-else 的结构化逻辑
  • 建立双向关系或索引

✍️ 代码示例:基本使用

Map<String, String> userMap = new HashMap<>();
userMap.put("001", "Alice");
userMap.put("002", "Bob");
System.out.println(userMap.get("001")); // 输出:Alice

✍️ 替代 if-else 的技巧

Map<String, Runnable> actionMap = new HashMap<>();
actionMap.put("login", () -> System.out.println("登录中"));
actionMap.put("logout", () -> System.out.println("登出中"));

String action = "login";
actionMap.getOrDefault(action, () -> System.out.println("未知操作")).run();

💡 小贴士

  • HashMap 是最常用实现,默认线程不安全;
  • 遍历 Map 时推荐使用 entrySet() 而非 keySet() + get()
  • 如果你需要顺序插入,请使用 LinkedHashMap
  • 线程安全需求可选 ConcurrentHashMap

🚨 集合类常见坑盘点(小白一定要避开)

场景 错误示例 建议做法
遍历过程中修改集合 使用普通 for 循环时 list.remove() 改用 Iteratorremove()
使用 Set 存放对象 未重写 equals()hashCode() 定义在类中
使用 Map 判断 key 是否存在 map.get(key) == null map.containsKey(key) 更保险
并发环境使用普通集合 多线程修改 ArrayListHashMap 使用 Collections.synchronizedXXX() 或并发类

🧠 总结:结合实际场景选对集合类

Java 集合框架看似简单,其实是构建高质量代码的关键基础设施。合理选择集合类,不仅可以减少代码量、提升可读性,也能显著提高性能和稳定性。

✨ 回顾核心建议:

  • 有序+可重复 → 用 List
  • 无序+去重 → 用 Set
  • 键值关系 → 用 Map
  • 特殊需求(排序、并发、顺序)根据实现类选择

对于老项目开发者而言,这种知识的“回炉”既是技术升级,也是一次和过往代码对话的过程。希望这篇文章能帮你写得更顺手、改得更安心。


📚 参考资料


如你所见,一步步捡回基础,也是一种沉稳的进步。
——默语 🌱


如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;( 联系微信:Solitudemind )

点击下方名片,加入 IT 技术核心学习团队。一起探索科技的未来,共同成长。

为了让您拥有更好的交互体验,特将这行文字设置为可点击样式:点击下方名片,加入 IT
技术核心学习团队。一起探索科技的未来,共同成长。

更多推荐