容器:Collection+Map
Collection:List+Set+Queue
List:
CopyOnWriteArrayList、Vector、ArrayList、LinkedList
Vector:线程安全,因为其实现方法都是synchronized,也因此效率很低。其子类:Stack
ArrayList数组实现,LinkedList链表实现,线程不安全,但可以通过Collections工具类的synchronizedList()静态方法转化为SynchronizedList<>类型实现线程安全。
CopyOnWriteArrayList(JUC包下 ):底层用的lock 实现,一般情况下对一个list读取的非常多,改写非常少时使用。(扩展:为什么不是linked类型?原因:链表不适合复制)
Set:
HashSet、SortedSet、EnumSet、CopyOnWriteArraySet、ConcurrentSkipListSet
HashSet :hashMap 实现,其子类LinkedHashSet可以实现读取时的元素顺序与写入时元素顺序一致
SortSet:可排序的Set集合,其子类TreeSet由红黑树实现。
CopyOnWriteArraySet:适合读多写少
ConcurrentSkipListSet:基于链表结构,通过跳表实现查找,
Queue:
Deque: ArrayDeque、BlockingDeque
BlockingQueue:ArrayBlockingQueue,LinkedBlockingQueue,PriorityBlockingQueue ,SynchronousQueue(容量为空),LinkedTransferQueue常被用于线程池,
ConcurrentLinkedQueue:CAS实现并发,效率相对高
PriorityQueue:基于小顶堆或大顶堆
DelayQueue:利用priorityQueue来实现的,
Map
HashMap、TreeMap、 WeakHashMap,ConcurrentHashMap,ConCurrentSkipListMap,identityHashMap
HashMap: LOAD_FACTORY(加载因子):0.75
INITIAL_CAPACITY:初始化容量:16
HashMap在JDK1.7是以数组加链表的形式组成,JDK1.8后新增了红黑树结构,当链表长度大于8并且容量大于64时,链表结构会转成红黑树结构。