一文认识Java常见集合

一文认识 Java 常见集合(Java Collections Framework 核心速览,2025–2026 视角)

Java 集合框架(JDK 1.2 引入,至今仍是日常开发最核心的部分)主要解决:动态存储一组对象的问题,比数组更灵活。

两大分支:

  • Collection ← 单元素集合(List、Set、Queue)
  • Map ← 键值对集合(独立分支,不继承 Collection)

核心对比表格(最常用实现)

集合类型接口是否有序是否允许重复是否线程安全(JDK内置)底层数据结构随机访问效率插入/删除效率主要使用场景代表实现类
ListList有序允许否(Vector 除外)动态数组 / 双向链表O(1) / O(n)末尾 O(1) / 中间 O(n)需要索引访问、频繁随机读写ArrayList(首选)、LinkedList、Vector
SetSet无序/有序不允许否(少数除外)哈希表 / 红黑树O(1) / O(log n)去重、唯一元素集合HashSet、LinkedHashSet、TreeSet
QueueQueue / Deque有序(FIFO / 双端)允许部分(ConcurrentLinkedQueue 等)链表 / 数组 / 堆O(1)任务队列、消息队列、先入先出PriorityQueue、ArrayDeque、LinkedList
MapMap无序/插入序/排序key 不重复否(Hashtable 除外)哈希表 / 红黑树O(1) / O(log n)O(1) / O(log n)键值映射、字典、配置、缓存HashMap(首选)、LinkedHashMap、TreeMap

一图速览继承关系(文字版简化)

Iterable
  └─ Collection
      ├─ List
      │   ├─ ArrayList
      │   ├─ LinkedList  (也实现 Deque)
      │   └─ Vector (线程安全,古老)
      ├─ Set
      │   ├─ HashSet
      │   ├─ LinkedHashSet (保持插入顺序)
      │   └─ SortedSet → NavigableSet → TreeSet (红黑树排序)
      └─ Queue
          ├─ Deque → ArrayDeque、LinkedList
          └─ PriorityQueue (小顶堆)

Map (独立)
  ├─ HashMap
  ├─ LinkedHashMap (插入/访问顺序)
  ├─ SortedMap → NavigableMap → TreeMap (红黑树排序)
  └─ Hashtable (线程安全,古老)

最常用 8 个集合的详细对比(面试 + 日常必背)

集合类底层实现是否允许 null线程安全时间复杂度关键点适用场景 & 注意事项
ArrayList动态数组允许get/set O(1),add/remove 中间 O(n)99% 情况下 List 首选,查询多、尾部增删多
LinkedList双向链表允许get/set O(n),头尾 add/remove O(1)频繁头尾操作、做队列/栈、内存不敏感时用
HashSetHashMap允许 nulladd/contains/remove 平均 O(1),最差 O(n)普通去重需求
LinkedHashSetHashMap + 双向链表允许 null同 HashSet + 保持插入顺序需要去重且保持插入顺序
TreeSet红黑树 (TreeMap)不允许 nulladd/contains/remove O(log n),天然有序需要排序、范围查询、去重+有序
HashMap数组 + 链表/红黑树key/value 允许 nullget/put 平均 O(1),JDK8+ 树化后最差 O(log n)普通键值对存储,首选 Map
LinkedHashMapHashMap + 双向链表允许 null同 HashMap + 插入/访问顺序LRU 缓存、保持插入顺序
TreeMap红黑树key 不允许 nullget/put O(log n),key 有序需要按 key 排序的 Map(如区间统计)

快速选择口诀(背下来就能少踩坑)

  • 需要索引访问 + 尾部操作多ArrayList
  • 需要频繁头尾增删LinkedList(或 ArrayDeque)
  • 需要去重HashSet(不关心顺序) / LinkedHashSet(要插入顺序) / TreeSet(要排序)
  • 需要键值对HashMap(不关心顺序) / LinkedHashMap(要顺序或 LRU) / TreeMap(要 key 排序)
  • 多线程环境简单粗暴 → Collections.synchronizedXXX() 包装、ConcurrentHashMap(推荐)、CopyOnWriteArrayList/Set(读多写少)

常见面试高频对比问题

  1. ArrayList vs LinkedList:查询 vs 头尾增删
  2. HashMap vs TreeMap vs LinkedHashMap:无序 vs 排序 vs 插入顺序
  3. HashSet 如何保证不重复?(hashCode + equals)
  4. HashMap JDK7 vs JDK8 区别?(头插法 → 尾插法 + 红黑树)
  5. ConcurrentHashMap 为什么比 Hashtable 性能好?(分段锁 → CAS + synchronized)

一句话总结:日常 80% 场景用 ArrayList + HashMap + HashSet 就够了,剩下 20% 再根据“顺序、排序、并发、LRU”等特殊需求选其他实现。

有哪一个集合想深入看源码 / 时间复杂度推导 / 面试题?或者想看某个具体场景的代码示例?随时告诉我~

文章已创建 4695

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部