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