集合
类 | 底层实现 | 备注 | 接口 |
---|---|---|---|
ArrayList | Object[] | 默认的数组大小是10 | List |
LinkedList | Node(双向链表) | List Deque | |
Vector | Object[] | 线程安全的ArrayList,但是存在并发删除报错的异常 | List |
HashSet | HashMap | 使用Map的key保存元素,value是一个空对象 | Set |
LinkedHashSet | LinkedHashMap | HashSet Set | |
TreeSet | TreeMap | Set | |
HashMap | Node[] 单向链表 | 默认数组大小为16,加载因子是0.75 | Map |
LinkedHashMap | 额外使用一个链表保存保存元素的插入顺序 | HashMap Map | |
TreeMap | 红黑树 | 按照特定的比较器进行元素排序 | Map |
HashTable | 线程安全的HashMap,但是存在并发删除报错的异常 | Map |
非阻塞队列
非阻塞队列的特色就是队列里面没有数据时,操作队列出现异常或返回null,不具有等待/阻塞的特色。
ConcurrentHashMap
类ConcurrentHashMap是支持并发操作的Map对象。
与HashTable的区别:HashTable不支持在循环中remove()元素,HashTable在获得Iterator对象后,不允许更改其结构,否则出现java.util.ConcurrentModificationException异常。
ConcurrentSkipListMap
类ConcurrentSkipListMap支持根据对象的compareTo()方法进行排序
ConcurrentSkipListSet
类ConcurrentSkipListSet支持排序而且不允许重复的元素
ConcurrentLinkedQueue
类ConcurrentLinkedQueue提供了并发环境的队列操作。
- 方法poll()当没有获得数据时返回null,如果有数据时则移除表头,并将表头进行返回。
- 方法element()当没有获得数据时出现NoSuchElementException异常,如果有数据时则返回表头项。
- 方法peek()当没有获得数据时返回为null,如果有数据时则不移除表头,并将表头进行返回。
ConcurrentLinkedDeque
ConcurrentLinkedQueue仅支持对列头进行操作,而ConcurrentLinkedDeque支持对列头列尾双向操作。
CopyOnWriteArrayList
线程安全的ArrayList
CopyOnWriteArraySet
线程安全的HashSet
阻塞队列
- 如果阻塞队列是空的,从阻塞队列中取东西的操作将会被阻塞进入等待状态,直到阻塞队列中添加了元素才会被唤醒。
- 如果阻塞队列是满的,从阻塞队列中存放元素的操作将会进行等待状态,知道阻塞队列里有剩余空间才会被唤醒继续操作。
ArrayBlockingQueue
类ArrayBlockingQueue提供一种有界阻塞队列的功能。底层使用数组实现。
LinkedBlockingQueue
类LinkedBlockingQueue和ArrayBlockingQueue在功能上大体一样,只不过ArrayBlockingQueue是有界的,而LinkedBlockingQueue是无界的,但也可以定义为有界的。底层使用链表实现。
LinkedBlockingDeque
类LinkedBlockingQueue只支持对列头的操作,而LinkedBlockingDeque支持对双端结点的操作。
PriorityBlockingQueue
类PriorityBlockingQueue支持在并发情况下的优先级队列。
SynchronousQueue
类SynchronousQueue为异步队列,是一种阻塞队列,其中每个插入操作必须等待另一个线程的对应移除操作,反之亦然。
LinkedTransferQueue
类LinkedTransferQueue提供的功能与SynchronousQueue有些类似,但其具有嗅探功能,也就是可以尝试性地添加一些数据。
DelayQueue
类DelayQueue提供一种延时执行任务的队列。