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