面试题答案
一键面试HashMap
- 存储结构:基于哈希表实现,使用数组+链表(JDK 1.8 后引入红黑树优化,链表长度超过8且数组长度大于64时转换为红黑树)。
- 性能特点:插入、查找、删除操作平均时间复杂度为O(1),在哈希冲突严重时退化为O(n),适合在单线程环境下快速查找和插入元素。
- 线程安全性:非线程安全。
TreeMap
- 存储结构:基于红黑树实现,按键的自然顺序或自定义顺序排序。
- 性能特点:插入、查找、删除操作时间复杂度为O(log n),适用于需要按键排序的场景。
- 线程安全性:非线程安全。
LinkedHashMap
- 存储结构:继承自HashMap,同时使用双向链表维护插入顺序或访问顺序。
- 性能特点:基本和HashMap性能类似,由于维护链表额外开销,性能略逊于HashMap,支持按插入顺序或访问顺序遍历。
- 线程安全性:非线程安全。
Hashtable
- 存储结构:基于哈希表实现,与HashMap类似,但实现细节有差异。
- 性能特点:插入、查找、删除操作平均时间复杂度为O(1),在哈希冲突严重时退化为O(n),性能略低于HashMap,因为其方法多为同步方法。
- 线程安全性:线程安全,方法使用
synchronized
关键字修饰。
ConcurrentHashMap
- 存储结构:JDK 1.7 基于分段锁实现,将数据分成多个段,每个段有独立锁;JDK 1.8 基于CAS + synchronized实现,锁粒度更细。
- 性能特点:在多线程环境下,性能优于Hashtable,插入、查找、删除操作在高并发下具有较好的性能。
- 线程安全性:线程安全,允许多个线程同时读,部分线程同时写。