Java集合框架与泛型应用深度解析
1. Java学习日记——DAY22深入理解集合框架与泛型应用今天是我系统学习Java的第22天决定把重点放在集合框架(Collection Framework)和泛型(Generics)这两个核心概念上。作为Java语言中最基础也最强大的特性之一集合框架几乎出现在所有Java项目中而泛型则是保证类型安全的利器。记得刚开始接触时我对为什么需要这么多不同的集合类感到困惑ArrayList和LinkedList到底有什么区别HashMap和HashTable又该如何选择通过今天的系统梳理终于把这些知识点真正串联起来了。2. 集合框架的体系结构解析2.1 集合框架的三大分支Java集合框架主要分为三大类接口List、Set和Queue。每种接口都有其特定的应用场景和实现类List接口有序集合允许重复元素ArrayList基于动态数组随机访问快(O(1))但插入删除慢(O(n))LinkedList基于双向链表插入删除快(O(1))但随机访问慢(O(n))Vector线程安全的ArrayList但性能较差Set接口不允许重复元素HashSet基于哈希表无序查找快(O(1))LinkedHashSet保持插入顺序的HashSetTreeSet基于红黑树自动排序(O(log n))Queue接口先进先出(FIFO)的队列PriorityQueue优先级队列ArrayDeque双端队列实现2.2 集合的选择策略在实际开发中选择哪种集合取决于具体需求如果需要快速随机访问选择ArrayList如果频繁在集合中间插入/删除元素选择LinkedList如果需要去重且不关心顺序选择HashSet如果需要保持插入顺序选择LinkedHashSet如果需要自动排序选择TreeSet如果需要线程安全考虑Collections.synchronizedList()或ConcurrentHashMap提示在Java 8之后Stream API可以很方便地对集合进行操作如过滤、映射、归约等这大大简化了集合处理代码。3. Map接口及其实现类详解3.1 HashMap的工作原理HashMap是Java中最常用的Map实现它基于哈希表实现键值对存储。其核心机制包括哈希函数通过hashCode()方法计算键的哈希值冲突解决Java 8之后采用链表红黑树的混合结构扩容机制默认负载因子0.75当元素数量超过容量*负载因子时自动扩容// HashMap的基本使用示例 MapString, Integer wordCount new HashMap(); wordCount.put(Java, 1); wordCount.put(Python, 2); wordCount.put(C, 3); // Java 8新增的forEach方法 wordCount.forEach((k, v) - System.out.println(k : v));3.2 HashMap与HashTable的对比虽然两者都实现了Map接口但有几点关键区别特性HashMapHashTable线程安全不安全安全允许null键值都可以为null键值都不能为null性能更高较低迭代器fail-fast不是fail-fast继承关系继承AbstractMap继承Dictionary在现代Java开发中HashTable已经被ConcurrentHashMap取代后者提供了更好的并发性能。4. 泛型在集合中的应用4.1 泛型的基本概念泛型是Java 5引入的重要特性它允许在编译时检查类型安全避免了运行时的ClassCastException。在集合中使用泛型可以明确指定集合中元素的类型// 不使用泛型Java 5之前 List list new ArrayList(); list.add(Hello); String s (String) list.get(0); // 需要强制类型转换 // 使用泛型 ListString genericList new ArrayList(); genericList.add(Hello); String s genericList.get(0); // 自动类型推断4.2 泛型通配符Java泛型支持三种通配符无界通配符?表示未知类型上界通配符? extends Number表示Number或其子类下界通配符? super Integer表示Integer或其父类// 上界通配符示例 public static double sum(List? extends Number list) { double sum 0; for (Number n : list) { sum n.doubleValue(); } return sum; } // 下界通配符示例 public static void addNumbers(List? super Integer list) { for (int i 1; i 10; i) { list.add(i); } }5. 集合的线程安全与并发控制5.1 同步集合与并发集合Java提供了多种方式来实现线程安全的集合操作Collections.synchronizedXXX包装普通集合使其线程安全ListString syncList Collections.synchronizedList(new ArrayList());Concurrent集合Java 5引入的java.util.concurrent包中的专门实现ConcurrentHashMapCopyOnWriteArrayListConcurrentLinkedQueue不可变集合Java 9引入的List.of(), Set.of()等工厂方法5.2 ConcurrentHashMap的实现原理ConcurrentHashMap是HashMap的线程安全版本但实现方式与HashTable完全不同分段锁Java 7采用分段锁机制将整个Map分成多个SegmentCAS操作Java 8改为使用CAS(Compare-And-Swap)和synchronized优化并发性能扩容机制支持并发扩容不会阻塞所有操作// ConcurrentHashMap使用示例 ConcurrentHashMapString, Integer map new ConcurrentHashMap(); map.put(one, 1); map.putIfAbsent(one, 100); // 不会覆盖已有值 // 原子更新 map.compute(one, (k, v) - v null ? 1 : v 1);6. 集合的性能优化实践6.1 初始化容量设置集合类在创建时指定初始容量可以避免频繁扩容带来的性能开销// 不好的做法使用默认初始容量(16)可能频繁扩容 MapString, String map1 new HashMap(); // 好的做法预估元素数量设置初始容量 MapString, String map2 new HashMap(1000);6.2 遍历集合的最佳实践Java提供了多种遍历集合的方式性能差异明显for循环适合ArrayList等随机访问快的集合迭代器通用性强适合所有集合forEachJava 8引入语法简洁Stream APIJava 8引入支持函数式编程ListString languages Arrays.asList(Java, Python, C); // 传统for循环 for (int i 0; i languages.size(); i) { System.out.println(languages.get(i)); } // 增强for循环 for (String lang : languages) { System.out.println(lang); } // 使用迭代器 IteratorString it languages.iterator(); while (it.hasNext()) { System.out.println(it.next()); } // Java 8 forEach languages.forEach(System.out::println); // 使用Stream API languages.stream().forEach(System.out::println);7. 实际开发中的集合使用技巧7.1 避免ConcurrentModificationException这个异常通常发生在使用迭代器遍历集合时同时修改集合结构ListString list new ArrayList(Arrays.asList(a, b, c)); // 错误示例会抛出ConcurrentModificationException for (String s : list) { if (s.equals(b)) { list.remove(s); // 直接修改原集合 } } // 正确做法1使用迭代器的remove方法 IteratorString it list.iterator(); while (it.hasNext()) { if (it.next().equals(b)) { it.remove(); // 通过迭代器删除 } } // 正确做法2Java 8 removeIf list.removeIf(s - s.equals(b));7.2 自定义对象作为Map的键当自定义类作为HashMap的键时必须正确重写hashCode()和equals()方法class Student { private String id; private String name; // 构造函数、getter/setter省略 Override public int hashCode() { return Objects.hash(id, name); } Override public boolean equals(Object obj) { if (this obj) return true; if (obj null || getClass() ! obj.getClass()) return false; Student student (Student) obj; return Objects.equals(id, student.id) Objects.equals(name, student.name); } } // 使用示例 MapStudent, Integer scoreMap new HashMap(); Student s1 new Student(001, Alice); scoreMap.put(s1, 90);8. Java 8对集合的增强8.1 Stream API的引入Java 8的Stream API为集合操作带来了革命性的变化ListString languages Arrays.asList(Java, Python, C, JavaScript, Ruby); // 过滤出长度大于3的语言并转换为大写 ListString result languages.stream() .filter(lang - lang.length() 3) .map(String::toUpperCase) .collect(Collectors.toList()); // 分组统计 MapInteger, ListString lengthMap languages.stream() .collect(Collectors.groupingBy(String::length)); // 并行流处理 long count languages.parallelStream() .filter(lang - lang.startsWith(J)) .count();8.2 新的集合工厂方法Java 9引入了方便的集合工厂方法可以创建不可变集合// Java 9之前创建不可变集合 ListString oldList Collections.unmodifiableList( Arrays.asList(a, b, c)); // Java 9工厂方法 ListString newList List.of(a, b, c); SetString newSet Set.of(a, b, c); MapString, Integer newMap Map.of(a, 1, b, 2);经过今天的学习我对Java集合框架有了更系统、更深入的理解。特别是通过实际编码验证了各种集合类的性能特点和使用场景这对我以后写出更高效、更健壮的代码有很大帮助。在实际项目中选择正确的集合类型往往能显著提升程序性能而合理使用泛型则能大大减少运行时错误。明天我计划继续深入研究Java的并发编程部分特别是与集合相关的并发工具类。

相关新闻

羽悦助手-快手上货软件-支持多平台数据上传-api接口一天可上传500-多店铺管理-商品批量上下架

羽悦助手-快手上货软件-支持多平台数据上传-api接口一天可上传500-多店铺管理-商品批量上下架

快手无货源店群从业者,常常面临跨平台搬货繁琐、手动上传速度慢、多家店铺切换打理麻烦、滞销商品无法统一管控等难题。羽悦助手是专为快手小店研发的一站式铺货运营工具,依托官方 API 传输通道打造,主打多平台货源采集上传、日稳定上传 500 …

2026/7/30 9:25:48 阅读更多 →
DC-DC转换器设计实战:从拓扑选型到PCB布局的避坑指南

DC-DC转换器设计实战:从拓扑选型到PCB布局的避坑指南

1. 项目概述:从“黑盒子”到“能量心脏” DC-DC转换器,这个名字听起来有点技术范儿,但说白了,它就是电子设备里的“能量心脏”和“电压适配器”。想象一下,你手头有一个12V的电池,但你的单片机、传感器、显…

2026/7/30 9:25:48 阅读更多 →
新盛公司客服:推出2026最新盛公司开户必备材料清单

新盛公司客服:推出2026最新盛公司开户必备材料清单

新盛公司开户别跑空!这份材料清单收好了 不少老板在新盛公司开户时,总因材料不全白跑一趟!今天整理好超全清单,照着准备一次搞定,收藏备用不踩坑~核心基础材料是标配,缺一不可:营业执…

2026/7/30 9:25:47 阅读更多 →

最新新闻

3分钟搞定跨平台词库迁移:开源工具让40+输入法格式互通无阻

3分钟搞定跨平台词库迁移:开源工具让40+输入法格式互通无阻

3分钟搞定跨平台词库迁移:开源工具让40输入法格式互通无阻 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 你是否遇到过这样的困扰?换了新手机…

2026/7/30 9:34:51 阅读更多 →
告别“废片”!手把手教你用AI一键生成电商全套主图

告别“废片”!手把手教你用AI一键生成电商全套主图

做电商最头疼的是什么?不是没流量,而是手里拿着几张干巴巴的“白底图”或者手机随手拍的素材,却不知道怎么做成能卖货的精美主图和详情图。 别慌,甩手图省事的【商品套图】功能就是专门解决这个痛点的。它能把你上传的“素材”&a…

2026/7/30 9:34:51 阅读更多 →
万物智慧拌合站系统有哪些核心模块?

万物智慧拌合站系统有哪些核心模块?

万物智慧拌合站系统一体化 12 大核心子模块: 1.生产管理模块:订单、浇筑令、开盘生产、任务跟踪 2.材料管理模块:原材料入库出库、库存、节超分析 3.质量监控模块:配比管控、异常预警、质量溯源 4.无人过磅模块:车牌识…

2026/7/30 9:34:51 阅读更多 →
3步快速上手:Linux用户如何安装原汁原味的哔哩哔哩客户端

3步快速上手:Linux用户如何安装原汁原味的哔哩哔哩客户端

3步快速上手:Linux用户如何安装原汁原味的哔哩哔哩客户端 【免费下载链接】bilibili-linux 基于哔哩哔哩官方客户端移植的Linux版本 支持漫游 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-linux 还在为Linux系统上没有官方B站客户端而烦恼吗&…

2026/7/30 9:34:51 阅读更多 →
一步一步学习使用LiveBindings()使用代码创建LiveBindings绑定

一步一步学习使用LiveBindings()使用代码创建LiveBindings绑定

一步一步学习使用LiveBindings:使用代码创建LiveBindings绑定 引言:什么是LiveBindings?LiveBindings是Delphi和CBuilder中一个强大的数据绑定框架,它允许开发者在不同对象之间建立动态的数据连接。与传统的硬编码赋值不同&#x…

2026/7/30 9:34:51 阅读更多 →
C语言入门指南:从基础语法到核心概念

C语言入门指南:从基础语法到核心概念

1. 初识C语言:从零开始的编程之旅 第一次接触C语言时,我完全被它的简洁与强大所震撼。作为一门诞生于1972年的编程语言,C语言至今仍在操作系统、嵌入式系统、游戏开发等关键领域占据统治地位。它就像编程世界的拉丁语——虽然古老&#xff0c…

2026/7/30 9:33:50 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻