544 字
3 分钟
Java 集合面试导读:选型、List、Map 与遍历安全

集合主线不是只背 HashMap。先能按访问、去重、排序和并发需求选择容器,再解释核心实现。实现细节以文中指定的 JDK 为准,阈值与扩容比例不等于接口契约。

知识地图#

Collection/Map 选型
├─ List:ArrayList/LinkedList → 扩容与定位成本
├─ Map:HashMap → hash/equals → 扩容/树化
├─ Set/有序结构:去重 → 插入顺序/排序/优先级
└─ 遍历与并发:迭代器 → fail-fast → 快照/弱一致

阅读路线与目录#

导读排在系列最前面,下面的顺序与专题导航一致。每篇先读问题和解释,再尝试不看答案口述“是什么、怎么工作、有什么边界”,不需要逐句背原文。

专题掌握标准
集合全景与选型能画出 Collection 与 Map 的主要分支。
ArrayList 与 LinkedList能区分定位、增删、扩容和内存成本。
HashMap 主线能说明桶定位、key 匹配、插入及线程安全。
Set 与有序 Map能区分 HashSet、LinkedHashMap、TreeMap、PriorityQueue,以及 Comparable/Comparator。
遍历与线程安全能安全删除,说明 fail-fast 不是安全保证。
选读:HashMap 扩容了解容量翻倍后的高低位迁移。
选读:JDK 8 的改进能解释优化不代表 HashMap 变得线程安全。
选读:树化的取舍知道为什么小桶用链表、冲突多时用树。

第一轮准备到哪里?#

第一轮只读前五篇,后三篇用于查漏与追问,不需要重复背诵。暂不展开红黑树旋转证明、所有 key 的极端碰撞情况和集合源码逐行分析。

自查问题#

  • 为什么 LinkedList 按下标在中间插入通常仍是 O(n)?
  • HashSet 怎样判断重复,TreeSet 的判断又有什么不同?
  • ConcurrentModificationException 能证明或保障线程安全吗?
  • 为什么 PriorityQueue 的遍历不保证排序?

回答这些问题时,先给结论,再说明机制,最后用文章中的例子或边界验证。答不清时回到对应专题,不另外堆一套重复题库。

相关系列#

并发容器主线接 ConcurrentHashMap,更多线程知识看 Java 并发导读。

Java 集合面试导读:选型、List、Map 与遍历安全
https://blog.xqcherry.top/posts/interview/java/java-collections-interview-roadmap/
作者
xqcherry
发布于
2026-10-12
许可协议
CC BY-NC-SA 4.0