451 字
2 分钟
Java 集合框架:List、Set、Queue 与 Map 如何选择

Java 集合主要分为 Collection 和 Map 两大体系。前者表示一组元素,后者表示 key-value 映射。

Java Collection 层次结构

Collection#

接口常见实现特点
ListArrayList、LinkedList、Vector有序、可重复
SetHashSet、LinkedHashSet、TreeSet通常不允许重复
QueuePriorityQueue、LinkedList按队列规则处理元素

ArrayList 基于数组,随机访问快;LinkedList 基于双向链表,已定位节点的增删方便,但按下标增删仍要计算遍历定位的成本;Vector 是较早的线程安全 List,如今很少作为首选。HashSet 基于哈希表,LinkedHashSet 保留插入顺序,TreeSet 基于红黑树按比较规则排序。普通队列或栈也可优先考虑 ArrayDeque。

Java Map 层次结构

Map#

  1. HashMap:最常用的哈希映射。
  2. LinkedHashMap:维护插入顺序。
  3. TreeMap:基于红黑树,按 key 排序。
  4. Hashtable:早期线程安全 Map,通常由 ConcurrentHashMap 替代。
  5. ConcurrentHashMap:面向高并发访问,锁粒度比 Hashtable 更细。

常见选型问题#

ArrayList 和 LinkedList 怎么选?#

大多数场景优先 ArrayList。它的数组移动使用了优化后的底层拷贝,且具有更好的 CPU 缓存局部性;LinkedList 更适合确实需要链表语义的场景,也可以作为队列使用。

ConcurrentHashMap 和 Hashtable 有什么区别?#

Hashtable 倾向于整表加锁;ConcurrentHashMap 在 JDK 1.7 使用分段锁,JDK 1.8 将锁粒度细化到数组桶,并结合 CAS 与 synchronized,因此并发能力更强。

HashMap 什么时候会树化?#

JDK 8 中要记住树化阈值 8、最小树化容量 64:数组太小时优先扩容,冲突较多时才考虑树化。扩容拆分后的树桶节点数不超过 6 时会转回链表;普通删除路径还会根据树结构判断,不是所有操作都按同一个数字规则退化。

Java 集合框架:List、Set、Queue 与 Map 如何选择
https://blog.xqcherry.top/posts/interview/java/java-collections-overview/
作者
xqcherry
发布于
2026-09-24
许可协议
CC BY-NC-SA 4.0