Java集合框架详解
Java 集合框架详解Java Collections FrameworkJava 集合框架JCF是 Java SE 中最核心的部分之一位于java.util包下。它提供了一套统一的接口、抽象类和实现类用于存储、管理和操作对象的集合如列表、集合、映射等。集合框架的核心目标是高效、类型安全、易扩展。本文将从基础到高级系统详解集合框架包括架构、核心接口/类、常用方法、线程安全、性能分析、源码要点、常见问题及最佳实践。基于 Java 172026 主流版本的视角结合实际开发经验。一、集合框架整体架构集合框架分为两大体系Collection 接口单值集合元素是单个对象。子接口List有序、可重复、Set无序、不重复、Queue队列、Deque双端队列。Map 接口键值对集合key-value pairs不继承 Collection。抽象类如 AbstractList、AbstractSet提供骨架实现方便自定义扩展。核心类图简述文字版Collection (接口) ├── List (接口) │ ├── ArrayList │ ├── LinkedList │ └── Vector (遗留) ├── Set (接口) │ ├── HashSet │ ├── LinkedHashSet │ └── TreeSet (SortedSet/NavigableSet) ├── Queue (接口) │ ├── PriorityQueue │ └── ArrayDeque (Deque 接口实现) └── Map (接口) ├── HashMap ├── LinkedHashMap ├── TreeMap (SortedMap/NavigableMap) └── Hashtable (遗留)辅助类Collections工具类提供排序、同步等、Arrays数组工具。二、核心接口与实现类详解1. List 接口有序、可重复特点支持索引访问、允许重复元素。常用实现ArrayList首选底层动态数组Object[]随机访问 O(1)扩容机制1.5 倍增长。LinkedList底层双向链表支持 Queue/Deque 接口头尾操作 O(1)随机访问 O(n)。Vector类似 ArrayList 但线程安全synchronized性能差已过时。2. Set 接口无序、不重复特点不允许重复equals 判断无索引。常用实现HashSet底层 HashMapkey 存元素O(1) 平均操作。LinkedHashSetHashSet 双向链表保持插入顺序。TreeSet底层红黑树TreeMap自动排序支持 NavigableSet 接口ceiling/floor 等。3. Queue 接口先进先出 FIFO特点用于任务调度、缓冲。常用实现PriorityQueue底层堆数组按优先级出队 O(log n)。ArrayDeque底层循环数组双端队列性能优于 LinkedList。4. Map 接口键值对特点key 唯一equals hashCodevalue 可重复。常用实现HashMap首选JDK8 数组 链表 红黑树链表 8 转树负载因子 0.75。LinkedHashMapHashMap 双向链表支持插入/访问顺序LRU 缓存。TreeMap底层红黑树按 key 排序支持 NavigableMapsubMap 等。Hashtable线程安全版 HashMap已过时。Java 9 新增不可变集合如 List.of()、Set.of()、Map.of()用于快速创建只读集合。三、常用方法汇总以 Collection 和 Map 为例Collection 接口方法方法类别示例方法描述添加add(E e), addAll(Collection c)添加元素/集合删除remove(Object o), clear()删除元素/清空查询contains(Object o), size(), isEmpty()检查包含/大小/空遍历iterator(), forEach(Consumer)迭代器/函数式遍历Java 8转换toArray()转数组Map 接口方法方法类别示例方法描述添加/修改put(K key, V value), putAll(Map m)插入/覆盖键值对删除remove(Object key), clear()删除键/清空查询get(Object key), containsKey(K key)获取值/检查键遍历keySet(), values(), entrySet()获取键集/值集/键值对集Java 8 新增computeIfAbsent, merge函数式操作如默认值示例代码ArrayList HashMapimportjava.util.*;publicclassCollectionDemo{publicstaticvoidmain(String[]args){// List 示例ListStringlistnewArrayList();list.add(apple);list.add(banana);list.add(1,orange);// 插入到索引1System.out.println(list.get(0));// apple// Map 示例MapInteger,StringmapnewHashMap();map.put(1,one);map.put(2,two);System.out.println(map.get(1));// one// 遍历map.forEach((k,v)-System.out.println(k: v));}}四、线程安全与并发集合标准集合如 ArrayList、HashMap非线程安全多线程下可能 ConcurrentModificationException。遗留安全类Vector、Hashtablesynchronized全同步性能低。现代推荐java.util.concurrent 包ConcurrentHashMap分段锁 CAS读无锁高并发首选。CopyOnWriteArrayList写时复制读无锁适合读多写少。ConcurrentLinkedQueue无锁队列CAS 实现。同步包装Collections.synchronizedList(list)但性能不如并发包。示例MapString,StringsafeMapnewConcurrentHashMap();safeMap.putIfAbsent(key,value);// 原子操作五、性能分析与选择指南性能对比表平均复杂度集合类型添加删除查询遍历空间开销适用场景ArrayListO(1) 摊销O(n)O(1)O(n)中等随机访问、尾部操作LinkedListO(1)O(1)O(n)O(n)高节点频繁插入/删除HashSet/MapO(1)O(1)O(1)O(n)中等快速查找、去重TreeSet/MapO(log n)O(log n)O(log n)O(n)中等排序、范围查询PriorityQueueO(log n)O(log n)O(1) peekO(n)中等优先级调度HashMap 源码要点hash key.hashCode() ^ (h 16)链表转树阈值 8树转链表阈值 6。选择决策列表99% 用 ArrayList除非频繁头操作用 LinkedList/ArrayDeque。集合去重用 HashSet需要顺序用 LinkedHashSet排序用 TreeSet。映射普通用 HashMap顺序用 LinkedHashMap排序用 TreeMap。并发一律 ConcurrentXXX。六、常见问题与最佳实践常见问题ConcurrentModificationException遍历时修改集合。解决用 Iterator.remove() 或 CopyOnWrite。Null 值HashMap 允许 null key/valueTreeMap 不允许 null key。扩容开销ArrayList 默认容量 10扩容 1.5 倍。建议预估大小new ArrayList(100)。equals 与 hashCode自定义类做 key/set 元素必须重写否则不唯一。不可变集合Java 9 用 List.of()避免意外修改。最佳实践2026 主流接口编程ListT list new ArrayList();泛型 菱形运算符。函数式用 stream() 处理如list.stream().filter(x - x 0).collect(Collectors.toList());。大集合用 Guava 或 Apache Commons 扩展如 Multimap。内存优化大 Map 用 LinkedHashMap removeEldestEntry 实现 LRU。避免遗留别用 Vector/Hashtable用并发包代替。测试用 JUnit 测试集合行为尤其是自定义 equals/hashCode。七、扩展与高级主题Java 8 增强default 方法如 Map.getOrDefault、Stream API。自定义集合继承 AbstractList 等实现最小方法。序列化集合实现 Serializable但注意 transient 字段。与数组Arrays.asList() 转 List但固定大小。集合框架是 Java 开发的基石熟练掌握能显著提升代码效率和质量。如果想深入某个类源码如 HashMap 的 resize、具体示例代码或与 Kotlin/Scala 集合对比继续问我

相关新闻

司拉德帕Seladelpar改善原发性胆汁性胆管炎患者瘙痒症状的剂量

司拉德帕Seladelpar改善原发性胆汁性胆管炎患者瘙痒症状的剂量

原发性胆汁性胆管炎(PBC)是一种以肝内小胆管慢性非化脓性破坏为特征的自身免疫性肝病,患者常因胆汁淤积引发顽固性瘙痒,严重影响生活质量。传统治疗中,熊去氧胆酸(UDCA)对瘙痒的改善作用有限&am…

2026/6/30 2:14:40 阅读更多 →
毕设成品 stm32智能鱼缸监控投喂系统(源码+硬件+论文)

毕设成品 stm32智能鱼缸监控投喂系统(源码+硬件+论文)

文章目录 0 前言1 主要功能2 硬件设计(原理图)3 核心软件设计4 实现效果5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉…

2026/5/17 3:26:01 阅读更多 →
计算机毕设java学校机房管理系统 基于SpringBoot的高校计算机实验室智能管理平台 JavaWeb驱动的校园机房资源调度与服务系统

计算机毕设java学校机房管理系统 基于SpringBoot的高校计算机实验室智能管理平台 JavaWeb驱动的校园机房资源调度与服务系统

计算机毕设java学校机房管理系统z7q1w9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 随着高校信息化建设的深入推进,传统的人工机房管理模式已难以满足现代化教学…

2026/6/27 16:41:42 阅读更多 →

最新新闻

从信息检索到语义推荐:GEO的技术演进逻辑与越华云图陪跑方案

从信息检索到语义推荐:GEO的技术演进逻辑与越华云图陪跑方案

一、技术背景:搜索范式的迁移 信息获取方式正在经历第三次范式转移:阶段核心机制用户行为品牌优化目标Web 1.0(门户时代)编辑推荐被动浏览出现在门户网站Web 2.0(搜索时代)关键词检索主动搜索点击SEO排名优…

2026/7/6 3:36:07 阅读更多 →
LangChain Agent 开发第一天:先把最小 Demo 跑起来

LangChain Agent 开发第一天:先把最小 Demo 跑起来

今天先不讲复杂概念,也不急着做完整项目。 第一天的目标很简单:创建一个 LangChain Agent 项目,配置好模型接口,并跑通一个最基础的 Agent 示例。 只要这一步能跑通,后面再加工具、记忆、工作流、前端页面&#xff0…

2026/7/6 3:32:06 阅读更多 →
用《白鲸记》测试生产力应用:处理长文能力是关键?

用《白鲸记》测试生产力应用:处理长文能力是关键?

《白鲸记》:生产力应用的测试利器 待办事项列表应处理多少项内容虽非紧迫问题,但作者常思考生产力应用处理“用户生成”内容的能力。作者选择用《白鲸记》测试应用,因其篇幅长、用词复杂,若应用处理《白鲸记》表现良好&#xff0c…

2026/7/6 3:30:05 阅读更多 →
AI应用落地四板斧:场景闭环、数据可得、人机协同、交付确定

AI应用落地四板斧:场景闭环、数据可得、人机协同、交付确定

1. 项目概述:这不是发布会PPT,而是一份AI应用落地的实操路线图“腾讯智能体全景图亮相,汤道生解密打造AI应用四板斧”——这个标题乍看是科技媒体通稿的典型句式,但如果你在2023—2024年深度参与过至少两个中型以上AI项目落地&…

2026/7/6 3:30:05 阅读更多 →
Linux 源码安装 Redis 6.0.10 超详细教程(含编译报错、SCL源失效解决方案)

Linux 源码安装 Redis 6.0.10 超详细教程(含编译报错、SCL源失效解决方案)

一、前期准备 1.1 环境依赖 Redis 基于 C 语言开发,源码编译安装必须依赖 GCC 编译环境,未安装需提前执行命令安装基础编译依赖: yum install gcc-c1.2 安装包下载 官方下载地址:https://redis.io/download 选择 Stable 稳定…

2026/7/6 3:28:05 阅读更多 →
如何在Windows上安装APK文件:APK安装器终极指南

如何在Windows上安装APK文件:APK安装器终极指南

如何在Windows上安装APK文件:APK安装器终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想在Windows电脑上直接运行安卓应用,…

2026/7/6 3:28:05 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻