ConcurrentHashMap/ConcurrentHashSet
底层哈希实现的同步 Map(Set)。效率高,线程安全。使用系统底层技术实现线程安全。
量级较 synchronized 低。key 和 value 不能为 null。
ConcurrentSkipListMap/ConcurrentSkipListSet
底层跳表(SkipList)实现的同步 Map(Set)。有序,效率比 ConcurrentHashMap 稍低。
List
1.ArrayList集合
- 底层数据结构是数组,查找快,增删慢。
- 线程不安全的,效率高
2. Vector集合
- 底层数据结构是数组,查询快,增删慢
- 线程安全的,效率也很高。
3.LinkedList集合
- 底层数据结构是链表,查询慢,增删快
- 线程不安全,效率高
CopyOnWriteArrayList
- 写时复制集合。写入效率低,读取效率高。
- 每次写入数据,都会创建一个新的底层数组。
Set集合 (元素不可重复,元素唯一)
1.Hashset集合
非线程安全的
- 底层数据结构是哈希表,哈希表依赖两个方法hascode ()和equals()方法
- 两个方法的执行顺序:
首先判断hascode()值是否相同
是:继续执行equals()方法,看其返回值
是true:说明元素重复,不添加
是false:就直接添加元素
否:就直接添加到集合
2.TreeSet集合
非线程安全的
- 底层数据结构是二叉树
3.LinkedHashSet
Map
1.HashMap
非线程安全的
底层数据结构是哈希表
2.TreeMap
非线程安全的
底层数据结构是二叉树
1.HashTable
线程安全的
LinkedHashMap
ConcurrentHashMap
ConcurrentSkipListMap
java中的集合的选择
根据实际需求来选择合适的集合。
1.单列还是双列?
单列就选Collection类型的
双列选Map类型的
2.选择单列后
看元素是否唯一?
是: 选择Set集合
否: 选择List集合
看元素是否排序?
是:TreeSet;
否:HashSet
看安全性高低?
高:Vector
低:ArrayList 或LinkedList
增删多:LinkedList
查询多:ArrayList
网友评论