注意:这都只是接口而已
1、Queue
在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。
public interface Queue<E> extends Collection<E>
除了基本的 Collection 操作外,队列还提供其他的插入、提取和检查操作。
每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,具体取决于操作)。
队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。
在 FIFO 队列中,所有的新元素都插入队列的末尾,移除元素从队列头部移除。
Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。
offer 方法可插入一个元素,否则返回 false。这与 Collection.add 方法不同,该方法只能通过抛出未经检查的异常使添加元素失败。
remove() 和 poll() 方法可移除和返回队列的头。到底从队列中移除哪个元素是队列排序策略的功能,而该策略在各种实现中是不同的。remove() 和 poll() 方法仅在队列为空时其行为有所不同:remove() 方法抛出一个异常,而 poll() 方法则返回 null。
element() 和 peek() 返回,但不移除,队列的头。
Queue 实现通常不允许插入 null 元素,尽管某些实现(如 LinkedList)并不禁止插入 null。即使在允许 null 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。
值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。
import java.util.Queue; import java.util.LinkedList; public class TestQueue { public static void main(String[] args) { Queue<String> queue = new LinkedList<String>(); queue.offer("Hello"); queue.offer("World!"); queue.offer("你好!"); System.out.println(queue.size()); String str; while((str=queue.poll())!=null){ System.out.print(str); } System.out.println(); System.out.println(queue.size()); } }
2、Deque
public interface Deque<E> extends Queue<E>
一个线性 collection,支持在两端插入和移除元素。
名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。
大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。
此接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。因为此接口继承了队列接口Queue,所以其每种方法也存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false,具体取决于操作)。
a、在将双端队列用作队列时,将得到 FIFO(先进先出)行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。从 Queue 接口继承的方法完全等效于 Deque 方法,如下表所示:
b、用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留 Stack 类。在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。堆栈方法完全等效于 Deque 方法,如下表所示:
。。
相关推荐
所谓双端队列(double-ended queue,deque),就是在列表的两端都可以插入和删除数据。 因此它允许的操作有Create、IsEmpty、IsFull、Left、Right、AddLeft、AddRight、DeleteLeft、 DeleteRight。使用循环数组方式...
双端队列,在基础类上派生 用来实现平移递推滤波数据存储
双端队列(deque,double-ended queue),是一种具有队列和栈的性质的数据结构。 双端队列中每一端,都可以进行存入和取出,去其中一段,都像一个栈一样。 存取也只限定在两端,不能在中间 双端队列的实现 通过...
双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的线性数据结构。双端队列也拥有两端:队首(front)、队尾(rear),但与队列不同的是,插入操作在两端(队首和队尾)都可以进行,删除操作也一样...
deque 是 double-ended queue的缩写,类似于 list,不过提供了在两端插入和删除的操作。 appendleft 在列表左侧插入 popleft 弹出列表左侧的值 extendleft 在左侧扩展 例如: queue = deque() # append values ...
双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。 双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。 操作 Deque() ...
deque是双端队列(double-ended queue)的缩写,由于两端都能编辑,deque既可以用来实现栈(stack)也可以用来实现队列(queue)。 deque支持丰富的操作方法,主要方法如图: 相比于list实现的队列,deque实现拥有
只是最可爱和最小的队列/双端队列实现! 特征 微小:约 345 字节的最小压缩! 快速:所有操作的为 Tree Shakeable:如果您不需要完整的Deque请使用Queue ! 安装 $ npm i quetie 用法 import { Queue , Deque } ...
设计循环双端队列 题目 设计实现双端队列。 请不要使用内置的双端队列库。 链接:https://leetcode-cn.com/problems/design-circular-deque/ 思路 题目要求不使用内置的双端队列库,那么可以考虑使用双指针,即队首...
双端队列和随机队列 算法的双端队列和随机队列的实现I
约瑟夫环 leetcode DataStructure 数据结构与算法(Java实现) 00-leetcode 每个类对应leetcode的一道题,就是刷!...Deque双端队列实现 CircleQueue环形队列实现 CircleDeque环形双端队列实现 06-二叉树
双端队列(Deque) 循环队列 哈希表(HashTable) 树形数据结构 二叉树(BinaryTree)、二叉搜索树(BinarySearchTree、BST) 平衡二叉搜索树(BalancedBinarySearchTree、BBST) AVL树(AVLTree)、红黑树...
deque是双端队列(double-ended queue)的缩写,由于两端都能编辑,deque既可以用来实现栈(stack)也可以用来实现队列(queue)。 deque支持丰富的操作方法,主要方法如图: 相比于list实现的队列,deque实现...
队列双端队列:简单理解:两端可以进出的QueueDeque - double ended queue插入和删除都是O(1)的操作查询的话还是O(n)Deque
enqueue(item) 往队列中添加一个item元素dequeue() 从队列头部删除一个元素is_empty() 判断一个队列是否为空size() 返回队列的大小双端队列双端队列的操作Deque() 创建一个空的双端队列add_front(item) 从队头加入一...
riften :: Deque一种无出血边缘的无锁定单...此实现基于: https://github.com/taskflow/work-stealing-queue https://github.com/ssbl/concurrent-deque此实现对可以放置在双端队列中的类型没有任何限制,并且没有内存
双端队列 用于包装器包装。 当前存在此软件包以解决软件包(由npm使用)中,该实际上禁止将具有预发行版本(例如double-ended-queue@2.1.0-0)的软件包安装在顶级node_modules中目录。 将来,我们可能会使用我们...
C++标准模板库源代码主要涉及下面几个内容: vector 向量 deque 双端队列 list 链表 map 映射 multiset 多重集合 queue 队列 set 集合 stack 堆栈。