美文网首页
java基础知识5-队列

java基础知识5-队列

作者: liwsh | 来源:发表于2021-04-09 13:56 被阅读0次

1.Vector,ArrayList,LinkedList区别

Vector,ArrayList底层都是数组,Vector是线程安全的,arrayList不是。适合随机访问
LinkedList是双向链表,适合插入,删除

2. 集合类图

image.png

3. 各种set

TreeSet 自然排序,添加,删除操作低效些logn
HashSet hash算法,无序,添加,删除常量时间
LinkedHashSet 维护一个队列保存插入顺序,用于保证FIFO(先进先出)即有序的集合

4. 线程安全

只有Vector是线程安全的,其他都不是线程安全。
1.Collections.synchronizeList方法包装保证线程安全
2.线程安全的阻塞队列


image.png

分2类:

  1. BlockingQueue 模式,采取锁模式进行控制并发,有很多实现类,主要如下4个:
    ArrayBlockQueue:一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。创建其对象必须明确大小,像数组一样。一把锁控制put和take
    LinkedBlockQueue:一个可改变大小的阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。创建其对象如果没有明确大小,默认值是Integer.MAX_VALUE。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。两把锁分别控制put和take
    PriorityBlockingQueue:类似于LinkedBlockingQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数所带的Comparator决定的顺序。
    SynchronousQueue:同步队列。同步队列没有任何容量,每个插入必须等待另一个线程移除,反之亦然
  2. 有如下几个主要方法:


    image.png
  3. 另外一类是 ConcurrentLinkedQueue,采取CAS模式控制并发
    具体参考:https://www.jianshu.com/p/ad6ef76e067a
  4. 线程安全set,map


    image.png

    concurrentHashmap:无序
    concurrentSkipListMap:有序,跳表实现
    CopyOnWriteArrayList: 读多写少场景,写操作都通过空间换时间模式,拷贝一份内容修改后替换。

5. 排序

Arrays.sort /Collections.sort
针对基本类型使用快速排序
针对对象类型使用timSort,是合并排序(合并排序)和插入排序(插入排序)而得出的排序算法

相关文章

网友评论

      本文标题:java基础知识5-队列

      本文链接:https://www.haomeiwen.com/subject/ldxqhltx.html