collection

set

LinkedHashSet HashSet TreeSet ConcurrentSkipListSet CopyOnWriteArraySet
构造参数 16,0.75 16,0.75 ddd eee
构造参数 (1)collection(Math.max(2*c.size(), 11),0.75) (1)Math.max((int) (c.size()/.75f) + 1, 16),0.75 ccc 参见ConcurrentSkipListMap eee
实现原理 内部使用LinkedHashMap实现,key为参数,val为固定值 内部使用HashMap实现,key为参数,val为固定值 内部实现TreeMap,key为参数,val为固定值 内部实现ConcurrentSkipListMap,key为参数,val为固定值 内部实现CopyOnWriteArrayList,key为参数,val为固定值
扩大 参见LinkedHashMap 参见HashMap 参见TreeMap 参见ConcurrentSkipListMap 参见CopyOnWriteArrayList
有序
添加 同上 同上 同上 同上 addIfAbsent
删除 同上 同上 同上 同上 remove
遍历 map.keySet().iterator() map.keySet().iterator() 同上 同上 同上
遍历顺序 插入顺序 map.keySet().iterator() 同上 同上 同上
遍历原理 在hashmap结构下,使用一条链表链接插入数据 map.keySet().iterator() 同上 同上 同上

list

for in 使用iterator进行遍历

CopyOnWriteArrayList ArrayList Stack Vector LinkedList
构造参数 空(0数组),Collection(Arrays.copyOf入参大小),数组(Arrays.copyOf入参大小) 空(0数组),Collection(Arrays.copyOf入参大小) Vector子类 空(10数组),Collection(Arrays.copyOf入参大小)
实现原理 volatile修饰数组 数组 参见Vector 数组 链表
首次初始化容量 DEFAULT_CAPACITY=10 参见Vector 10
扩容多个 是(size>length+1) 参见Vector 是(size>length+1)
添加 重入锁,数组拷贝个数增一 当前数量小于size+1,扩容到1.5倍 添加到第一个 配置增加值->增加值,无增加值->扩容到2倍 链表添加到最后
不存在添加 重入锁,查询不存在进行添加
删除 重入锁,数组拷贝个数减一 删除指定值,然后后边向前挪 最后一个 删除指定值,然后后边向前挪 遍历找到指定位置,然后删除
获取指定位置 数组指定位置 数组指定位置 数组指定位置 遍历找到指定位置
遍历 forEach/for循环(遍按照数字循环) forEach/for循环(按照数字循环) 参见Vector forEach/for循环(按照数字循环) for循环(按照数字循环)
遍历 for in/iterator(new COWIterator然后按照数组遍历) for in/iterator(new Itr然后按照数组遍历) 参见Vector for in/iterator(new Itr然后按照数组遍历) forEach/for in/iterator(new ListItr然后按照链表遍历)

deque

CopyOnWriteArrayList ArrayDeque LinkedBlockingDeque
queue

通用方法

方法 抛出异常 特殊值 阻塞 超时
插入 add(e) offer(e) put(e) offer(e,time,unit)
移除 remove() poll() take() poll(time,unit)
检查 element() peek() 不可用 不可用

参考:https://blog.csdn.net/tayanxunhua/article/details/20962307

LinkedTransferQueue DelayQueue PriorityQueue ArrayBlockingQueue PriorityBlockingQueue LinkedBlockingQueue SynchronousQueue ConcurrentLinkedQueue
实现原理 使用takeLock(notEmpty),putLock(notFull)保证安全的链表
指定容量
构造参数 默认(max)/指定容量/Collection(max)
add if(offer)true(else)IllegalStateException
offer
offer(time) if(null)npe;if(容量满)false;(putLock.lock;if(容量满)false;添加值;if(当前值+1小于最大容量)notFull.signal;putLock.unlock)(if(容量空)(takeLock.lock;notEmpty.signal;takeLock.unlock))
remove
poll
poll(time)
take
element
peek