1.Vector,ArrayList,LinkedList区别
Vector,ArrayList底层都是数组,Vector是线程安全的,arrayList不是。适合随机访问
LinkedList是双向链表,适合插入,删除
2. 集合类图
image.png3. 各种set
TreeSet 自然排序,添加,删除操作低效些logn
HashSet hash算法,无序,添加,删除常量时间
LinkedHashSet 维护一个队列保存插入顺序,用于保证FIFO(先进先出)即有序的集合
4. 线程安全
只有Vector是线程安全的,其他都不是线程安全。
1.Collections.synchronizeList方法包装保证线程安全
2.线程安全的阻塞队列
image.png
分2类:
- BlockingQueue 模式,采取锁模式进行控制并发,有很多实现类,主要如下4个:
ArrayBlockQueue:一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。创建其对象必须明确大小,像数组一样。一把锁控制put和take
LinkedBlockQueue:一个可改变大小的阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。创建其对象如果没有明确大小,默认值是Integer.MAX_VALUE。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。两把锁分别控制put和take
PriorityBlockingQueue:类似于LinkedBlockingQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数所带的Comparator决定的顺序。
SynchronousQueue:同步队列。同步队列没有任何容量,每个插入必须等待另一个线程移除,反之亦然 -
有如下几个主要方法:
image.png - 另外一类是 ConcurrentLinkedQueue,采取CAS模式控制并发
具体参考:https://www.jianshu.com/p/ad6ef76e067a -
线程安全set,map
image.png
concurrentHashmap:无序
concurrentSkipListMap:有序,跳表实现
CopyOnWriteArrayList: 读多写少场景,写操作都通过空间换时间模式,拷贝一份内容修改后替换。
5. 排序
Arrays.sort /Collections.sort
针对基本类型使用快速排序
针对对象类型使用timSort,是合并排序(合并排序)和插入排序(插入排序)而得出的排序算法
网友评论