← 每日面试题 学习看板

Java中的集合类有哪些?如何分类的?

面试题/00java/01Java 基础/05 集合/Java中的集合类有哪些?如何分类的?.md

面试记录 2026-10-09

题目:Java 中的集合类有哪些?如何分类的?

难度:low

标签:java/collections, general/knowledge

评分:⭐⭐☆☆☆(2/5)

我的回答

Java 集合核心的其实也就是两项,一个是 List 系的,一个是 Map 系的。也就是链表跟,也就是存储一系列的 List,然后另外一个以及 Key-Value 类型的 Map。然后 List 衍生下来包括,Arraylist、LinkedList,然后还有相关的 LinkedList 衍生出来的栈跟队列。另外就是 HashMap 衍生出来类队列的 Set 集合,基本上就这几种类型。然后常用的就是 Arraylist,然后用来做日常的数据存储。然后 Linked List 可以做类似链表或者栈的方面的操作。Set 用来去重,存储常规数据集合。Map 方面就存储 KV,KV 映射。一般可以拿 MySQL 做缓存,然后保存一些日常的缓存数据。Redis 也可以当做一个大的 Map

点评

优点:

不足:

补充:

完整讲解

第一部分:知识重点剖析

核心考点定位:验证对 Java 集合框架顶层结构的整体认知,能否画出完整体系图并说清每种容器的选型场景。

知识点拆解:

  1. 底层原理:集合框架由两大顶层接口构成——Collection(元素集合)和 Map(键值对),Map 不在 Collection 之下。Collection 之下按语义分三支:List(有序可重复)、Set(无序不重复)、Queue(队列语义)。
  2. 关键设计:几乎每个抽象语义都有三种实现——基础版(ArrayList/HashSet/HashMap)、保插入序版(LinkedList/LinkedHashSet/LinkedHashMap)、排序版(—/TreeSet/TreeMap),以及并发版(CopyOnWriteArrayList/ConcurrentSkipListSet/ConcurrentHashMap)。
  3. 设计权衡:不同容器是不同复杂度曲线的权衡:ArrayList 数组下标 O(1) 但插删要搬;LinkedList 双端增删 O(1) 但随机访问 O(n);TreeSet 有序但每操作 O(log n);HashSet O(1) 但乱序。
  4. 工程实践:日常业务代码 90% 用 ArrayList + HashMap;排序场景上 TreeMap/TreeSet;去重且保插入序用 LinkedHashSet;并发计数用 ConcurrentHashMap 或 LongAdder。
  5. 过时 API:Vector、Stack 在 JDK5 后被 Collections.synchronizedList、Deque 全面替代;Dictionary 已被 Map 替代。
按「底层原理 → 设计权衡 → 工程实践」递进排列。

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. 为什么 Map 不是 Collection 的子接口?
  1. Deque 和 Queue 什么关系?为什么推荐用 Deque?
  1. ArrayList 和 LinkedList 到底谁快?
  1. CopyOnWriteArrayList 适合什么场景?为什么不适合写多?

第三部分:面试者参考回答(300-600 字口语化)

面试官您好,Java 集合框架的顶层结构是两根主干——Collection 和 Map,两者并列,Map 并不属于 Collection。

Collection 下面分三支:List 是有序可重复的,比如 ArrayList(数组,随机访问快)、LinkedList(双向链表,两端增删快)、CopyOnWriteArrayList(并发读);Set 是元素不重复的,有 HashSet(无序 O(1) 查重)、LinkedHashSet(保插入序)、TreeSet(自然排序);Queue 是队列语义,包含 PriorityQueue(堆)、ArrayDeque(双端队列)、ConcurrentLinkedQueue(无锁并发队列)。这里要注意 Deque 是 Queue 的子接口,扩展了双端操作,推荐用它替代过时的 Stack。

Map 下面主要有 HashMap(无序 O(1))、LinkedHashMap(保插入序、可当 LRU 缓存)、TreeMap(键自然排序)、ConcurrentHashMap(并发读写)和 WeakHashMap(弱引用清理)。选型上,日常业务 90% 是 ArrayList + HashMap;需要去重且保插入序用 LinkedHashSet 或 LinkedHashMap;需要排序用 TreeSet 或 TreeMap;并发场景直接上 ConcurrentHashMap。

另外提醒下,Vector 和 Stack 在 JDK5 之后已经被标记过时,用 Collections.synchronizedList 和 Deque 替代即可;Dictionary 也早已让位给 Map。真正并发容器都在 java.util.concurrent 包下,比如 ConcurrentSkipListSet、BlockingQueue 家族等。整体上选型口诀就是"要序用 Linked,要排用 Tree,要并发上 Concurrent,要快访问用 Array"。