当前位置: 首页 > news >正文

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. 高并发场景下集合选择的完整决策树

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

http://www.jsqmd.com/news/307569/

相关文章:

  • c语言 typedef、共用体、位运算、位段、枚举类型、内存管理
  • 《MySQL表的创建与约束:定义结构化数据的存储载体》
  • C#每日面试题-索引器和迭代器的区别
  • springboot教务系统实验室系统实验报告_gpa35-vue
  • 企业私有化部署刚需,MonkeyCode 安全适配本地模型
  • 【Django毕设全套源码+文档】基于Django的插画鲜花商城系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 深入剖析:按下 F5 后,浏览器前端究竟发生了什么?
  • springboot智能道路交通-vue
  • React 生命周期详解:从挂载到卸载
  • 【Django毕设全套源码+文档】基于Django框架的物资配送管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • springboot毕业生追踪系统vue
  • springboot大学生创新创业项目
  • springboot大学生科技项目活动比赛报名系统vue
  • springboot大学生选课系统
  • 【Django毕设全套源码+文档】基于Python的香港历史科普网站的设计与实现(丰富项目+远程调试+讲解+定制)
  • springboot宠物医院管理系统绿色vue
  • 教师工具箱神器,吾爱出品
  • 模型上下文协议 (MCP):AI 与外部世界的标准化连接框架
  • 生日鲜花批发多少钱,万花田性价比高不高值得中小店选购吗?
  • 汽车贴车衣服务费用多少 青岛平度光辉价格透明
  • 2026年水分活度仪厂商排名,靠谱且价格合理的企业哪家好
  • 2026年京津冀企业福利采购服务好的品牌排名,推荐哪家
  • 盘点2026年防撞板源头工厂排名,哪家口碑好?
  • 2026西安口碑好的权威短视频拍摄运营公司TOP3推荐
  • error_log默认格式的庖丁解牛
  • 苹果AirTag 2来了!重点升级UWB芯片,查找范围提升50%
  • 2026Q1国内输送设备厂家推荐,皮带线、网带线哪家好?品质标杆揭晓
  • 2026年是 AI落地大年,但会淘汰一批AI PPT工具
  • 靠谱的淀粉糖制造厂大盘点,这些企业实力不容小觑
  • 分析老牌铝板厂家鑫磊新材料,铝板批量定制价格多少钱?