List
ArrayList
底层为动态数组,因为它的增加、删除元素与size的变化不是原子操作,所以不是线程安全的
LinkedList
底层为双向链表,实现了List接口和Deque接口。不是线程安全的
Vector
创建了一个向量类的对象后,可以往其中随意插入不同类的对象。线程安全的,synchronized。替代方案:Collections.synchronizedList()
Map
HashMap
底层为哈希表,扩容时机和方式参考哈希表,不是线程安全。
JDK1.8中实现为哈希表+红黑树
LinkedHashMap
底层为哈希表和双向链表,保留元素的插入顺序,不是线程安全
TreeMap
红黑树,有序,非线程安全
Set
HashSet
底层为HashMap,不是线程安全
LinkedHashSet
底层为哈希表和双向链表,不是线程安全
TreeSet
基于TreeMap,不是线程安全
EnumSet
是一个抽象类,非线程安全
HashTable
不允许空键或值,线程安全,synchronized,遗留类,不应该使用
ConcurrentHashMap
HashTable的替代品,synchronized
本文深入解析了Java集合框架中各种容器的底层实现,包括List、Map和Set等接口的具体类如ArrayList、LinkedList、HashMap、TreeMap、HashSet及它们的线程安全性特性。详细对比了动态数组、双向链表、哈希表和红黑树的数据结构优劣。
5万+

被折叠的 条评论
为什么被折叠?



