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