JavaSE集合框架
Collection接口
子接口
-
List
-
ArrayList
- 数组实现,线程不安全,查询快,增删慢 , 元素有序,有下标, 元素可重复
-
LinkedList
- 链表实现,线程不安全,查询慢,增删块,可以通过Collections.synchronizedList()实现线程安全
-
Vcetor
- 数组实现,线程安全,效率低,jdk1.0的古老类不推荐使用,推荐使用java.util.concurrent.CopyOnWriteArrayList
-
CopyOnWriteArrayList
- jdk1.7并发包下线程安全的集合类,数组实现,查询快,增删慢,适用于读多写少的业务场景
-
-
Set
-
实现类
-
HashSet
- 底层数组+链表(依赖HashMap)实现,查询和增删都快,元素不重复,无序,线程不安全
-
LinkedHashSet
- 使用链表维护了元素插入的顺序,元素不重复,效率比HashSet低
-
CopyOnWriteArraySet
- 线程安全的无序集合,可以将它理解成线程安全的HashSet,适用于读多写少的业务场景
-
-
SortedSet子接口
-
TreeSet
- 有序的Set集合,支持自然排序和Comparator排序
-
-
-
Queue队列
-
实现类
-
ConcurrentLinkedQueue
- 线程安全的队列,用链表实现的队列,实现方式无锁算法CAS(比较交换算法),效率很高
-
LinkedList
- 链表实现,线程不安全,查询慢,增删块,可以通过Collections.synchronizedList()实现线程安全
-
-
BlockingQueue阻塞队列
-
线程安全
-
ArrayBlockingQueue
- 数组实现,可以实现有界队列,put方法添加元素时,如果队列满了会发生等待
-
LinkedBlockingQueue
- 链表实现,可以实现无界队列,put方法添加元素时,不会发生等待
-
-
-
Map
实现类
-
HashMap
- jdk1,8以前数组加链表实现,1.8后数组加链表加红黑树实现,当链表阈值大于8,数组长度大于64链表结构会转成红黑树,线程不安全,键:无序,无下标,元素不允许重复,可以为null ; 值 : 无序,无下标,元素允许重复,
-
Hashtable
- jdk1.0,线程安全,允许效率低,不允许键值为null
-
ConcurrentHashMap
- 使用分段锁实现线程安全,提高了读写效率,适用于高并发场景
-
LinkedHashMap
- 继承了HashMap ,维护了元素插入的顺序,
SortedMap子接口
-
TreeMap
- 红黑树算法的实现,自动排序,HashMap通常比TreeMap效率要高一些,一个是哈希表,一个是二叉树