从图中可以知道分为:Collection和Map两大类
Collection
Collection是List和Set抽象出来的接口,它包含了这些集合的基本操作。是集合的顶层接口
1.1List
List接口通常表示一个列表(数组、队列、链表,栈等),其中的元素可以重复,常用的实现类为ArrayList、LinkedList和Vector。
1.2 Set
Set接口通常表示一个集合,集合中的元素不允许重复(通过hashCode和equals函数保证),常用的实现类有HashSet和TreeSet,HashSet是通过Map中的HashMap来实现的,而TreeSet则是通过Map中的TreeMap实现的,另外TreeSet还实现了SortedSet接口,因此是有序的集合。
1.3 List 和 Set 的区别
Set接口存储的是无序的、不重复的数据
List接口存储的是有序的、可以重复的数据
Set检索效率低,删除和插入效率高,插入和删除不会引起元素位置改变。
List查找元素效率高,删除和插入效率低,List和数组类似,可以动态增长,根据实际存储的长度自动增长List的长度
Map
Map是一个映射接口,其中的每个元素都是一个Key-Value键值对,同样抽象类AbstractMap通过适配器模式实现了Map接口的大部分函数,TreeMap、HashMap和WeakHashMap等实现类都通过继承AbstractMap来实现。
Iterator
Iterator是遍历集合的迭代器,它可以用来遍历Collection,但是不能用来遍历Map。Collection的实现类都实现了iterator()函数,它返回一个Iterator对象,用来遍历集合,ListIterator则专门用来遍历List。而Enumeration则是JDK 1.0时引入的,作用与Iterator相同,但它的功能比Iterator要少,它只能在Hashtable、Vector和Stack中使用。
Arrays 和 Collections
Arrays和Collections是用来操作数组、集合的两个工具类,例如在ArrayList和Vector中大量调用了Arrays.Copyof()方法,而Collections中有很多静态方法可以返回各集合类的synchronized版本,即线程安全的版本,当然了,如果要用线程安全的集合类,首选concurrent并发包下的对应的集合类。
Java中哪些是线程安全的容器?
同步容器类:使用了synchronized
1.Vector
2.HashTable
并发容器:
3.ConcurrentHashMap:分段
4.CopyOnWriteArrayList:写时复制
5.CopyOnWriteArraySet:写时复制
Queue:
6.ConcurrentLinkedQueue:是使用非阻塞的方式实现的基于链接节点的无界的线程安全队列,性能非常好。
(java.util.concurrent.BlockingQueue 接口代表了线程安全的队列。)
7.ArrayBlockingQueue:基于数组的有界阻塞队列
8.LinkedBlockingQueue:基于链表的有界阻塞队列。
9.PriorityBlockingQueue:支持优先级的无界阻塞队列,即该阻塞队列中的元素可自动排序。默认情况下,元素采取自然升序排列
10.DelayQueue:一种延时获取元素的无界阻塞队列。
11.SynchronousQueue:不存储元素的阻塞队列。每个put操作必须等待一个take操作,否则不能继续添加元素。内部其实没有任何一个元素,容量是0
Deque:
(Deque接口定义了双向队列。双向队列允许在队列头和尾部进行入队出队操作。)
12.ArrayDeque:基于数组的双向非阻塞队列。
13.LinkedBlockingDeque:基于链表的双向阻塞队列。
Sorted容器:
14.ConcurrentSkipListMap:是TreeMap的线程安全版本
15.ConcurrentSkipListSet:是TreeSet的线程安全版本
https://blog.csdn.net/weixin_41163113/article/details/84976925
网友评论