欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > List、Set 和 Map 的区别及常见实现类、线程安全集合(总结图表)

List、Set 和 Map 的区别及常见实现类、线程安全集合(总结图表)

2025/5/8 2:31:40 来源:https://blog.csdn.net/m0_73078350/article/details/146352338  浏览:    关键词:List、Set 和 Map 的区别及常见实现类、线程安全集合(总结图表)

ListSet 和 Map 的区别

特性ListSetMap
元素顺序有序无序(部分实现有序)无序(部分实现有序)
元素唯一性允许重复不允许重复键唯一,值可重复
访问方式通过索引通过元素本身通过键
常见实现ArrayListLinkedListHashSetTreeSetHashMapTreeMap
底层数据结构动态数组、双向链表哈希表、红黑树哈希表、红黑树
适用场景需要顺序或索引访问需要去重或快速查找需要键值对映射

ListSet 和 Map 的常见实现类及其底层数据结构


1. List(列表)

实现类底层数据结构特点
ArrayList动态数组- 基于数组实现,支持随机访问。
- 插入和删除效率较低(需要移动元素)。
LinkedList双向链表- 基于链表实现,插入和删除效率高。
- 随机访问效率低(需要遍历链表)。
Vector动态数组(线程安全)- 类似 ArrayList,但线程安全。
- 性能较低,通常不推荐使用。

2. Set(集合)

实现类底层数据结构特点
HashSet哈希表(基于 HashMap)- 基于哈希表实现,插入、删除和查找效率高(平均 O(1))。
- 无序。
LinkedHashSet哈希表 + 双向链表- 在 HashSet 基础上维护插入顺序。
- 插入和查找效率接近 HashSet
TreeSet红黑树- 基于红黑树实现,元素按自然顺序或自定义顺序排序。
- 插入、删除和查找效率为 O(log n)。

3. Map(映射)

实现类底层数据结构特点
HashMap哈希表- 基于哈希表实现,插入、删除和查找效率高(平均 O(1))。
- 无序。
LinkedHashMap哈希表 + 双向链表- 在 HashMap 基础上维护插入顺序或访问顺序。
- 插入和查找效率接近 HashMap
TreeMap红黑树- 基于红黑树实现,键按自然顺序或自定义顺序排序。
- 插入、删除和查找效率为 O(log n)。
Hashtable哈希表(线程安全)- 类似 HashMap,但线程安全。
- 性能较低,通常不推荐使用。

常见的线程安全集合类及其底层数据结构和线程安全实现方式

1. List(列表)

实现类底层数据结构线程安全实现方式
Vector动态数组使用 synchronized 关键字修饰方法,保证线程安全。
Collections.synchronizedList基于传入的 List使用同步包装器,对所有方法加 synchronized 锁。
CopyOnWriteArrayList动态数组使用写时复制(Copy-On-Write)技术,读操作无锁,写操作复制新数组。

2. Set(集合)

实现类底层数据结构线程安全实现方式
Collections.synchronizedSet基于传入的 Set使用同步包装器,对所有方法加 synchronized 锁。
CopyOnWriteArraySet动态数组基于 CopyOnWriteArrayList,使用写时复制技术。

3. Map(映射)

实现类底层数据结构线程安全实现方式
Hashtable哈希表使用 synchronized 关键字修饰方法,保证线程安全。
Collections.synchronizedMap基于传入的 Map使用同步包装器,对所有方法加 synchronized 锁。
ConcurrentHashMap哈希表(分段锁)使用分段锁(JDK 7)或 CAS + synchronized(JDK 8+)。

4. Queue(队列)

实现类底层数据结构线程安全实现方式
BlockingQueue(接口)数组或链表使用锁和条件变量实现线程安全。
ArrayBlockingQueue数组使用 ReentrantLock 和 Condition 实现线程安全。
LinkedBlockingQueue链表使用两把锁(putLock 和 takeLock)提高并发性能。
ConcurrentLinkedQueue链表使用 CAS(Compare-And-Swap)实现无锁线程安全。

5. 总结对比

实现类底层数据结构线程安全实现方式适用场景
Vector动态数组synchronized 方法锁已过时,不推荐使用
Hashtable哈希表synchronized 方法锁已过时,不推荐使用
Collections.synchronizedXxx基于传入的集合synchronized 方法锁简单场景,性能要求不高
CopyOnWriteArrayList动态数组写时复制(Copy-On-Write)读多写少的场景
CopyOnWriteArraySet动态数组写时复制(Copy-On-Write)读多写少的场景
ConcurrentHashMap哈希表分段锁(JDK 7)或 CAS(JDK 8+)高并发场景
ConcurrentLinkedQueue链表CAS高并发队列场景
ArrayBlockingQueue数组ReentrantLock + Condition有界阻塞队列
LinkedBlockingQueue链表两把锁(putLock 和 takeLock)无界或有界阻塞队列

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词