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 无 无 无 无 无 无 无 无