news 2026/3/24 8:13:30

java集合框架

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java集合框架

Java 集合框架(Java Collections Framework)完整梳理

Java 集合框架是 Java 开发中最核心、最常用的部分之一,几乎所有的业务代码、算法实现、数据处理都离不开它。
下面从整体架构 → 核心接口 → 常用实现类 → 线程安全方案 → 面试高频考点给你一个系统、清晰、实用的总结(基于 Java 17/21 主流视角,2025–2026 实际开发常用写法)。

1. 集合框架整体架构图(一定要记住这张图)

Iterable<E> ↑ | Collection<E> / | \ List<E> Set<E> Queue<E> / | | \ | \ ArrayList LinkedList HashSet TreeSet PriorityQueue ArrayDeque | | | Vector(遗留) LinkedHashSet LinkedList(双端队列) | SortedSet<E> | NavigableSet<E> | TreeSet

三大顶层接口(最核心记忆点):

接口是否允许重复是否有序(插入顺序)是否排序(自然/比较器)是否线程安全(JDK 自带)典型实现类
ListArrayList、LinkedList、Vector
Set否(HashSet)/ 是(LinkedHashSet)否(HashSet)/ 是(TreeSet)HashSet、LinkedHashSet、TreeSet
Queue部分(PriorityQueue)PriorityQueue、ArrayDeque、LinkedList

2. 核心接口功能速查表

接口主要方法(最常用)典型使用场景
Collectionadd / remove / contains / size / isEmpty / clear / iterator所有集合的父接口(极少直接使用)
Listget(index) / set(index, e) / add(index, e) / remove(index) / indexOf / subList有序、可重复、需要索引访问
Setadd / remove / contains(重点:无序、无重复)去重、唯一性校验
SortedSet / NavigableSetfirst / last / headSet / tailSet / subSet / ceiling / floor / higher / lower需要排序的集合(TreeSet)
Queueoffer / poll / peek / element / remove队列(FIFO)
DequeaddFirst / addLast / offerFirst / offerLast / pollFirst / pollLast / peekFirst / peekLast双端队列(ArrayDeque 首选)
Map(单独的体系)put / get / remove / containsKey / keySet / values / entrySet键值对存储(HashMap / TreeMap 等)

3. 常用实现类对比(面试必背)

实现类底层数据结构是否线程安全是否有序是否允许 null key/value性能特点(增/删/查)典型场景
ArrayList动态数组value 可 null查 O(1),增删 O(n)随机访问多的列表
LinkedList双向链表value 可 null增删 O(1),查 O(n)频繁头尾操作、队列/栈
Vector动态数组(synchronized)是(全方法加锁)value 可 null性能差(锁粒度大)历史遗留,几乎不用
HashSetHashMap(key)key/value 均可 null平均 O(1)去重、不关心顺序
LinkedHashSetHashMap + 双向链表是(插入顺序)key/value 均可 null平均 O(1)去重 + 保持插入顺序
TreeSet红黑树是(自然/比较器)不允许 null keyO(log n)需要排序、去重
HashMap数组 + 链表/红黑树key/value 均可 null平均 O(1),最坏 O(log n)键值对存储(最常用)
LinkedHashMapHashMap + 双向链表是(插入/访问顺序)key/value 均可 null平均 O(1)LRU 缓存、保持插入顺序
TreeMap红黑树是(key 排序)key 不可 nullO(log n)需要 key 排序的 Map
PriorityQueue堆(二叉堆)是(优先级)元素不可 null入队/出队 O(log n)优先级队列、TopK 问题
ArrayDeque循环数组元素不可 null头尾操作 O(1)队列/栈(性能最佳)

4. 线程安全集合方案(面试必考)

方案实现方式优点缺点推荐场景
Vector / Hashtable内部方法加 synchronized简单锁粒度太大,性能极差历史遗留,几乎不用
Collections.synchronizedXXX包装器模式,全方法加 synchronized简单兼容旧代码性能差过渡方案
ConcurrentHashMap (推荐)分段锁 → Java 8+ CAS + synchronized高并发性能好API 稍复杂高并发 Map
CopyOnWriteArrayList写时复制读无锁,适合读多写少写性能极差,内存占用高读多写少(如事件监听器列表)
CopyOnWriteArraySet基于 CopyOnWriteArrayList同上同上读多写少去重集合
ConcurrentSkipListMap / Set跳表线程安全 + 有序空间占用较高高并发 + 需要排序
BlockingQueue(JUC)ArrayBlockingQueue / LinkedBlockingQueue 等线程安全 + 阻塞特性生产者-消费者模型

现代推荐(Java 17+):

  • 高并发 Map →ConcurrentHashMap
  • 高并发 List/Set →CopyOnWriteArrayList / CopyOnWriteArraySet(读多写少)
  • 需要排序的高并发 →ConcurrentSkipListMap / ConcurrentSkipListSet
  • 队列 →ArrayBlockingQueue(有界)或LinkedBlockingQueue(无界)

5. 面试高频总结(快速背诵版)

  1. ArrayList vs LinkedList
    ArrayList 随机访问快(O(1)),插入/删除慢(O(n));LinkedList 插入/删除快(O(1)),随机访问慢(O(n))

  2. HashMap 底层原理(Java 8+):
    数组 + 链表,链表长度 > 8 转为红黑树;扩容 2 倍,rehash

  3. HashMap 为什么线程不安全
    put 时可能死循环(JDK 7)、数据丢失(JDK 8+)

  4. ConcurrentHashMap 为什么性能好
    Java 7:分段锁;Java 8+:CAS + synchronized + 红黑树

  5. fail-fast vs fail-safe
    fail-fast:迭代过程中修改集合抛 ConcurrentModificationException(ArrayList、HashMap)
    fail-safe:不抛异常,但可能看到旧数据(CopyOnWriteArrayList、ConcurrentHashMap)

  6. Collections.unmodifiableList vs Collections.unmodifiableCollection
    前者返回不可修改的 List 视图,后者返回 Collection 视图

6. 2025–2026 开发最佳实践

  • 优先使用ArrayList(99% 场景)
  • 需要去重 →HashSet / LinkedHashSet
  • 需要排序 →TreeSet / TreeMap
  • 高并发 →ConcurrentHashMap(首选)
  • 读多写少 →CopyOnWriteArrayList
  • 队列/栈 →ArrayDeque(性能最佳)
  • 优先使用for-each循环或Stream API
  • 尽量避免 Vector / Hashtable / Stack(遗留类)

你现在最想深入哪个集合的具体实现细节或使用场景?
A. HashMap / ConcurrentHashMap 源码级原理(1.7 vs 1.8)
B. CopyOnWriteArrayList 写时复制的优缺点与源码
C. ArrayList vs LinkedList 真实性能对比场景
D. Stream API 与集合框架的结合实战
E. 高并发场景下集合选择的完整决策树

告诉我字母,我继续带你深入!

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

springboot宠物医院管理系统绿色vue

目录 系统概述技术栈核心功能模块绿色设计特点扩展性 开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 SpringBoot宠物医院管理系统结合Vue.js前端框架&#xff0c;构建高效、用户友好的宠物医疗管理平台。系统采用前…

作者头像 李华
网站建设 2026/3/23 1:56:03

springboot宠物领养寄养兽医预约系统vue

目录 系统概述技术架构核心功能扩展特性部署与优化 开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 SpringBoot宠物领养寄养兽医预约系统结合Vue前端框架&#xff0c;构建了一个全栈式的宠物服务管理平台。系统涵盖宠…

作者头像 李华
网站建设 2026/3/23 0:33:33

【Django毕设全套源码+文档】基于Django框架的物资配送管理系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/13 4:36:08

error_log默认格式的庖丁解牛

error_log 默认格式 是 PHP 内置错误日志的 标准文本格式&#xff0c;由 Zend 引擎直接生成&#xff0c;无需任何日志库&#xff08;如 Monolog&#xff09;。它虽简单&#xff0c;却包含 时间、错误类型、消息、文件、行号 五大核心要素&#xff0c;是排查 PHP 错误的第一道防…

作者头像 李华
网站建设 2026/3/20 20:04:30

本地部署管理助手 Grocy 并实现外部访问

Grocy 是一款一个自托管的 PHP 网络应用程序&#xff0c;可用于记录物品信息并根据个性化需求进行管理。支持购物清单、家庭用品库存、日常任务及食谱管理&#xff0c;覆盖家庭生活的多个方面&#xff0c;提升组织效率。方便用户清理家庭杂物&#xff0c;避免使用过期物品。本文…

作者头像 李华