容器

Collection

List

Vector

Java1.0容器,线程安全,自带锁

Stack

ArrayList

数组实现的非线程安全队列

LinkedList

基于链表实现的线程安全队列,内部方法使用了synchronized

CopyOnWriteList

写时复制,适合读多写少的业务。在添加一个元素的时候,会将之前的元素复制一份,扩容一个位置,然后添加新的元素。

Set

HsahSet

EnumSet

sortedSet

CopyOnWriteArraySet

写时复制,适合读多写少的业务。在添加一个元素的时候,会将之前的冤元素复制一份,扩容一个位置,然后添加新的元素。

ConcurrentSkipListSet

Queue

Deque

ArrayDeque

BlockingDeque

LinkedBlockingDeque

BlockingQueue

阻塞队列
put()添加方法,加满了会阻塞
take()获取方法,取空了会阻塞

ArrayBlockQueue

有界的,可以指的那个固定容量,一旦容器满了put方法就会阻塞,add方法会抛异常,offer方法可以用返回值判断是不是添加成功了,offer方法还可以添加一个时间参数(尝试添加超时时间)

PriorityBlockingQueue

LinkedBlockingQueue

链表实现的无界队列,一直可以添加到内存满了为止。

SynchronousQueue

容量为0,不能存储内容,适用于两个线程之间传递内容,类似于Exchanger锁实现。
take方法需要要put方法一起使用,只有put进去了才能take到内容

TransferQueue

可以用来线程间传递任务,SynchronousQueue只能传递一个,TransferQueue可以做成列表传递多个
只有当取线程取走了内容,存线程才会离开继续执行

LinkedTransferQueue

PriortyQueue

添加的时候可以是无序的,内部会做一个排序的操作。按照优先级最小的优先。
内部实现结构是二叉树

ConcurrentLinkedQueue

DelayedQueue

可是实现时间上的排序。
需要实现Delayed接口,需要实现comparable接口的比较方法compareTo

Map

HashMap

非线程安全,基于数组(key)和链表(value)实现,存储key-value键值对

HashTable

Java1.0容器,线程安全,自带锁

LinkedHashMap

TreeMap

排好序的map

WeakHashMap

IdentityHashMap

ConcurrentHashMap

并发的,主要是读效率高,线程安全。Java8以前基于链表实现,8之后基于红黑树实现。
内部方法没有加锁,用cas实现

ConcurrentSkipListMap

支持并发,线程安全。底层存储一个链表,有序的。
查找的时候分多层,类似于mysql的索引结构。

原文地址:https://www.cnblogs.com/farmersun/p/12686773.html