JAVA集合框架面试篇

✅ 一、集合框架基本结构

1. Java 集合框架的主要接口有哪些?它们的特点?

接口 特点
Collection 根接口,定义了集合的基本操作,如增删查等
List 有序、可重复元素,支持索引访问
Set 无序、不可重复元素
Queue 一种先进先出的集合,常用于任务调度
Deque 双端队列,既可作为队列也可作为栈
Map 键值对结构,不属于 Collection,但常并列讨论

✅ 二、List 接口相关

2. ArrayListLinkedList 的区别?

方面 ArrayList LinkedList
底层结构 动态数组 双向链表
查询效率 高(O(1)) 低(O(n))
增删效率 末尾快,中间慢 任意位置都快(O(1)插入/删除)
是否线程安全
适用场景 频繁访问 频繁插入、删除

面试技巧: 可以结合实际使用场景举例,比如分页展示用 ArrayList,队列任务用 LinkedList。


✅ 三、Set 接口相关

3. HashSetTreeSet 的区别?

方面 HashSet TreeSet
底层结构 HashMap TreeMap(红黑树)
是否有序 是,按自然顺序或指定比较器
插入查找效率 O(1) O(log n)
允许 null 吗 允许一个 null 不允许 null

红黑树考点:TreeSet 是基于红黑树实现的,保证元素有序。


✅ 四、Map 接口相关

4. HashMapHashtable 的区别?

方面 HashMap Hashtable
线程安全 是(方法加了 synchronized
是否允许 null 允许一个 null 键和多个 null 值 不允许
性能
出现时间 JDK1.2 JDK1.0(过时)

5. Java 8 对 HashMap 做了哪些优化?

  • 当链表长度超过 8 且桶数量 > 64 时,链表转为红黑树,优化查找性能从 O(n) 到 O(log n)

  • 更好的 hash 分布,减少 hash 冲突

  • resize 更高效,扩容后节点分布更均匀


✅ 五、线程安全集合

6. 线程安全的集合有哪些?如何实现?

集合类 实现方式
Vector / Hashtable 方法加锁(效率低)
Collections.synchronizedList() 外部包装同步
CopyOnWriteArrayList 写时复制,读操作无锁,高并发读场景使用
ConcurrentHashMap 分段锁(JDK 1.7),CAS+链表/红黑树(JDK 1.8)

加分项ConcurrentHashMap 是面试重头戏!你可以讲它在 JDK1.8 使用了 CAS + synchronized 来提高性能。


✅ 六、重点底层原理题

7. HashMap 的底层实现原理?

简要流程:

  1. 通过 hash(key) 计算哈希值

  2. 定位数组索引:(n - 1) & hash

  3. 若该位置为空,直接插入;否则链表(或红黑树)处理冲突

  4. 超过负载因子 0.75 时扩容(resize)

8. 为什么 HashMap 的初始容量是 16?扩容为什么是 2 倍?

  • 16 是 2 的幂,便于位运算优化

  • 2 倍扩容可使 hash 重新分布,减少冲突,提高性能


✅ 七、泛型与迭代器

9. Iterator 和 ListIterator 的区别?

方面 Iterator ListIterator
支持方向 单向 双向
是否支持增删 支持删除 支持增删
使用范围 所有集合 仅用于 List

10. 为什么增强 for 循环不能删除元素?

  • 增强 for 本质使用的是 Iterator,不能同时修改集合

  • 调用 remove() 需显式使用迭代器,否则会抛出 ConcurrentModificationException


✅ 八、面试加分题:源码/实战理解

11. 为什么建议使用 HashMap 的 key 应该是不可变对象?

  • 防止 hashCode()equals() 改变,导致定位错误、数据丢失

  • 常用 StringInteger 等不可变类作为 key

12. equals()hashCode() 的关系?

  • 如果两个对象 equals() 相等,它们 hashCode() 一定相等

  • 反之不成立

  • 集合如 HashSetHashMap 必须重写这两个方法,否则查找异常


✅ 九、实战技巧 & 经典面试策略

13. 常见面试陷阱题

  • “为什么不建议在 foreach 中使用 remove?”

  • “HashMap 的线程不安全体现在什么地方?”

  • “ConcurrentHashMap 的 size 为什么不精确?”


总结:高频面试套路

类型 面试重点
数据结构原理 ArrayList、LinkedList、HashMap、TreeMap
线程安全 HashTable、ConcurrentHashMap、CopyOnWriteArrayList
时间复杂度 增删查各集合的时间复杂度
底层机制 HashMap 的 hash、扩容、树化
场景应用 根据业务选择合适集合

你可能感兴趣的:(java,java,面试,开发语言)