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的索引结构。