queue和deque的区别,queueing还是queuing
queue和deque的区别,queueing还是queuing详细介绍
本文目录一览:双端队列和双向链表有什么区别
1、单向队列只能从头进,从尾出 双向队列则头尾均可push,pop 双向链表则可以从任何一个元素位置起找到其他所有元素。其实两个没有什么比较的意义。
2、双向链表的节点中有两个指针域,其中一个指向直接后继,另一个指向直接前驱。
3、双端队列就是可以在两端进行操作的队列 你可以用链表来表示双端队列,分别在链表头和尾进行插入或删除操作。链表有一个指针叫单链表,二个指针叫双向链表。
4、最后一个结点指针指向不同 在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是像双向链表那样置为NULL。此种情况还用于在最后一个结点后插入一个新的结点。
5、指向不同:单向链表只有一个指向下一结点的指针,双向链表除了有一个指向下一结点的指针外,还有一个指向前一结点的指针。 功能不同:单向链表只能next ,双向链表可以return。
list,vector和deque的区别
连续存储结构,即其每个元素在内存上也是连续的,类似于vector,不同之处在于,deque提供了两级数组结构, 第一级完全类似于vector,代表实际容器;另一级维护容器的首位地址。
内存 的时候,使用了MAP的结构和方法。化整为零,分配了许多小的连续空间,因此,从deque两端添加、删除元素是十分方便的。最重要的一点:如果在不知道内存具体需求的时候,使用deque绝对是比vector好的。
vector,list,deque和map 主要的区别还是数据结构上的区别。vector是动态数组,vectorint 可以存int型数据,用户只要存就好。不用考虑空间不够再 申请空间的情况。list 链表,deque 是双向队列 ,先进先出,后进后出。
deque是在功能上合并了vector和list。
LinkedBlockingQueue
LinkedBlockingQueue内部由单链表实现,只能从head取元素,从tail添加元素。添加元素和获取元素都有独立的锁,也就是说LinkedBlockingQueue是读写分离的,读写操作可以并行执行。
final修饰的字段是表示不能修改的。这里的last明显不是不能修改的。问题描述中担心的last可能为null,其实在整个对象实例化是已经为last赋值一个不为null的对象。而后续的赋值也都是保证不为null的。
LinkedBlockingQueue内部使用了两把重入锁ReentrantLock,分别用来保护插入操作和删除操作。同样也是使用两个条件对象来实现阻塞逻辑。
LinkedBlockingDeque还是可选容量的,防止过度膨胀,默认等于Integer.MAX_VALUE。;LinkedBlockingDuque没有进行读写锁的分离,因此同一时间只能有一个线程对其操作,因此在高并发应用中,它的性能要远远低于LinkedBlockingQueue。
在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列。
CourrentLinkedQueue:高并发的队列。BlockingQueue:阻塞队列,其中的方法put和take,put当队列满时就会阻塞,take当队列空时就会阻塞。