news 2026/5/8 19:21:33

Java集合框架详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java集合框架详解

Java 集合框架详解(Java Collections Framework)

Java 集合框架(JCF)是 Java SE 中最核心的部分之一,位于java.util包下。它提供了一套统一的接口、抽象类和实现类,用于存储、管理和操作对象的集合(如列表、集合、映射等)。集合框架的核心目标是:高效类型安全易扩展

本文将从基础到高级,系统详解集合框架,包括架构、核心接口/类、常用方法、线程安全、性能分析、源码要点、常见问题及最佳实践。基于 Java 17+(2026 主流版本)的视角,结合实际开发经验。

一、集合框架整体架构

集合框架分为两大体系:

  1. Collection 接口:单值集合(元素是单个对象)。
    • 子接口:List(有序、可重复)、Set(无序、不重复)、Queue(队列)、Deque(双端队列)。
  2. 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:底层 HashMap(key 存元素),O(1) 平均操作。
    • LinkedHashSet:HashSet + 双向链表,保持插入顺序。
    • TreeSet:底层红黑树(TreeMap),自动排序,支持 NavigableSet 接口(ceiling/floor 等)。

3. Queue 接口(先进先出 FIFO)

  • 特点:用于任务调度、缓冲。
  • 常用实现
    • PriorityQueue:底层堆(数组),按优先级出队 O(log n)。
    • ArrayDeque:底层循环数组,双端队列,性能优于 LinkedList。

4. Map 接口(键值对)

  • 特点:key 唯一(equals + hashCode),value 可重复。
  • 常用实现
    • HashMap(首选):JDK8+ 数组 + 链表 + 红黑树(链表 >8 转树),负载因子 0.75。
    • LinkedHashMap:HashMap + 双向链表,支持插入/访问顺序(LRU 缓存)。
    • TreeMap:底层红黑树,按 key 排序,支持 NavigableMap(subMap 等)。
    • 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 + HashMap):

importjava.util.*;publicclassCollectionDemo{publicstaticvoidmain(String[]args){// List 示例List<String>list=newArrayList<>();list.add("apple");list.add("banana");list.add(1,"orange");// 插入到索引1System.out.println(list.get(0));// apple// Map 示例Map<Integer,String>map=newHashMap<>();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、Hashtable(synchronized,全同步,性能低)。
  • 现代推荐(java.util.concurrent 包):
    • ConcurrentHashMap:分段锁 + CAS,读无锁,高并发首选。
    • CopyOnWriteArrayList:写时复制,读无锁,适合读多写少。
    • ConcurrentLinkedQueue:无锁队列,CAS 实现。
  • 同步包装:Collections.synchronizedList(list),但性能不如并发包。

示例

Map<String,String>safeMap=newConcurrentHashMap<>();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。

六、常见问题与最佳实践

常见问题

  1. ConcurrentModificationException:遍历时修改集合。解决:用 Iterator.remove() 或 CopyOnWrite。
  2. Null 值:HashMap 允许 null key/value,TreeMap 不允许 null key。
  3. 扩容开销:ArrayList 默认容量 10,扩容 1.5 倍。建议预估大小:new ArrayList<>(100)
  4. equals 与 hashCode:自定义类做 key/set 元素,必须重写(否则不唯一)。
  5. 不可变集合:Java 9+ 用 List.of(),避免意外修改。

最佳实践(2026 主流)

  • 接口编程List<T> 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 集合对比,继续问我~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 23:13:02

python新能源汽车数据分析大屏可视化系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

python新能源汽车数据分析大屏可视化系统(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码爬虫可用 前后端分离 技术栈&#xff1a;Django、Mysql、DataV 介绍 Python开发的汽车数据分析大屏可视化系统&#xff0c;旨在帮助用户…

作者头像 李华
网站建设 2026/5/7 2:54:03

计算机毕设java新疆IP形象NFT藏品网站 基于SpringBoot的新疆文化IP数字藏品交易平台 “丝路映象“非遗数字资产发行与展示系统

计算机毕设java新疆IP形象NFT藏品网站w6q0g9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。在"东数西算"与"文化数字化"双重战略推动下&#xff0c;新疆丰…

作者头像 李华
网站建设 2026/5/7 21:59:48

GitHub 热榜项目 - 日榜(2026-02-08)

GitHub 热榜项目 - 日榜(2026-02-08) 生成于&#xff1a;2026-02-08 统计摘要 共发现热门项目&#xff1a; 12 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜凸显AI驱动的实用开发工具成为核心趋势&#xff0c;开源社区正聚焦于提升开发效率与软件安全。O…

作者头像 李华
网站建设 2026/5/8 8:05:23

信创办公套件如何实现Word批注的完整Web转存?

企业级CMS编辑器增强功能实施方案 一、项目概述 作为安徽集团上市公司项目负责人&#xff0c;针对企业网站后台管理系统编辑器功能增强需求&#xff0c;我司计划开发一套支持多格式文档导入、微信公众号内容抓取的编辑器插件系统。该系统需满足党政事业单位信创要求&#xff…

作者头像 李华
网站建设 2026/5/2 22:44:52

学长亲荐!更贴合研究生需求的AI论文网站,千笔写作工具 VS 学术猹

随着人工智能技术的迅猛发展&#xff0c;AI辅助写作工具已逐渐成为高校学生完成论文写作的重要帮手。尤其是在研究生阶段&#xff0c;面对繁重的学术任务和严格的论文要求&#xff0c;越来越多的学生开始借助AI工具提升写作效率、优化内容质量。然而&#xff0c;市场上AI写作工…

作者头像 李华
网站建设 2026/4/28 4:01:25

2026别错过!9个AI论文网站测评:自考毕业论文+开题报告高效写作指南

随着2026年自考毕业论文写作季的临近&#xff0c;越来越多考生开始关注如何高效完成开题报告与论文撰写。面对内容构思困难、格式规范复杂、查重压力大等挑战&#xff0c;一款合适的AI写作工具成为提升效率的关键。为此&#xff0c;笔者基于真实用户使用体验与功能实测数据&…

作者头像 李华