一、传统集合
collection:
list:ArrayList LinkedList Vector Stack
set:HashSet TreeSet
Map:HashMap TreeMap
二、简单的不再多说,只说不会的!
1、Vector: 默认创建大小为10的Object数组(所以是基于数组实现的) add, remove方法都是添加了 synchronized关键字的 所以线程安全
vector 扩大数组 是扩大两倍 线程安全
ArrayList 扩大 *1.5+1 线程不安全
2、Stack : 先进后出
继承于Vector,所以也是线程安全的!
push pop peek
3
HashSet 基于HashMap实现,使用的是hashMap中的Key, 无容量限制 ,非线程安全
TreeSet 基于TreeMap实现, 支持排序 ,非线程安全
4
HashMap 基于Entry数组实现, key,value 后出entry, 无容量限制,非线程安全
TreeMap 基于 红黑树实现,无容量限制,非线程安全
三、各种实现方式
ArraylIst 数组
linkedList 双向 链表
Vector 数组
Stack 数组
HashSet 基于HashMap实现
TreeSet 基于TreeMap 实现
HashMap 基于Entry对象的数组实现
TreeMap 基于 红黑树实现
四、传统集合的一些性能
1、set 和 map 类型的查找是通过hash后,再到链表上查找,所以速度相对来说要快!
2、当数量超过万级别:
插入:arrayList Vector的影响比较大,其他基本没什么变化
查找和删除;list 的性能下降比较严重,set和map基本不受影响
五、并发集合
以下都是线程安全的:
ConcurrentHashMap 在每一个分段上都用锁进行保护,从而让锁的粒度更精细一些,并发性能更好,而HashMap没有锁机制,不是线程安全的。
CopyOnWriteArrayList 在读写操作无锁的 ArrayList
CosyOnWriteArraySet 基于CopyOnWriteArrayList实现
ArrayBlockingQueue 基于数组,先进先出,阻塞读写
ArrayBlockingQueue(int capacity)创建一个带有给定的(固定)容量和默认访问策略的 ArrayBlockingQueue。同时初始化锁和两个锁上的condition,一个为notEmpty 一个为notFull
六、原子操作
AtomicInteger AtomicLong AtomicBoolean
七、Executors
newCachedThreadPool()
创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。
newFixedThreadPool(int nThreads)
创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
newSingleThreadExecutor()
创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
newScheduledThreadPool(int corePoolSize)
创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
适合于:定时或者延迟的任务,在异步操作中需要 超时回调的场景
更多信息请查看IT技术专栏