Queue和Deque

转载 2016年08月30日 22:29:08

注意:这都只是接口而已

 

1、Queue

API

在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。

 

Java代码  收藏代码
  1. public interface Queue<E>   
  2.     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来用。

Java代码  收藏代码
  1. import java.util.Queue;    
  2. import java.util.LinkedList;    
  3.   
  4. public class TestQueue {    
  5.     public static void main(String[] args) {    
  6.         Queue<String> queue = new LinkedList<String>();    
  7.         queue.offer("Hello");    
  8.         queue.offer("World!");    
  9.         queue.offer("你好!");    
  10.         System.out.println(queue.size());    
  11.         String str;    
  12.         while((str=queue.poll())!=null){    
  13.             System.out.print(str);    
  14.         }    
  15.         System.out.println();    
  16.         System.out.println(queue.size());    
  17.     }    
  18. }   

 

 

2、Deque

API 

Java代码  收藏代码
  1. public interface Deque<E>  
  2.     extends Queue<E>  

 一个线性 collection,支持在两端插入和移除元素。

名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。

大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。

 

此接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。因为此接口继承了队列接口Queue,所以其每种方法也存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false,具体取决于操作)。

 

a、在将双端队列用作队列时,将得到 FIFO(先进先出)行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。从 Queue 接口继承的方法完全等效于 Deque 方法,如下表所示:


 

b、用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留 Stack 类在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。堆栈方法完全等效于 Deque 方法,如下表所示:

【java】队列、优先队列、双端队列Deque、链表LinkedList、阻塞队列(Blocking queue)

package test; public class HelloWorld { public static void main(String[] args) { java.util....

Java队列Queue、双端队列Deque

http://uule.iteye.com/blog/2095650?utm_source=tuicool 注意:这都只是接口而已   1、Queue API 在ja...

C++各个容器比较(vector,deque,list,set,map,queue,stack)

1、vector(连续的空间存储,可以使用[ ]操作符)可以快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间随机的插入、删除元素要慢。而且,如果一开始分配的空间不够时,有一个重新分配更大空间...

C++学习笔记(字符串string、vector_deque、queue,multiset、map、multimap、容器拷贝问题)(复制粘贴,方便后面翻阅)

1.string操作#include #include #include //算法using namespace std;//STL standard template libary 标准模(m...
  • ccj659
  • ccj659
  • 2016年09月12日 11:04
  • 802

关于容器queue和deque

queue   例程1: [cpp] view plain copy print? #include "stdafx.h"  #include   #inc...

Java 队列 Queue、Deque、AbstractQueue 源码分析

源码均以JDK8作为参考 在JDK1.5Collection集合框架重构中,引入了队列(Queue)的概念,同时在JDK1.6中引入了双端队列(Deque)的概念。 1.Queue简介: Queue:...

Coursera Algorithms Programming Assignment 2: Deque and Randomized Queue

这次作业与第一周作业相比,稍微简单一些。有三个编程练习:双端队列(Deque)设计、随机队列(Randomized Queue)设计,还有一个排列组合类Permutation。 一、双端队列De...

Queue AbstractQueue Deque 源代码

Queue AbstractQueue Deque 源代码

C++各个容器比较(vector,deque,list,set,map,queue,stack)

1、vector(连续的空间存储,可以使用[ ]操作符)可以快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间随机的插入、删除元素要慢。而且,如果一开始分配的空间不够时,有一个重新分配更大空间...

C++各个容器比较(vector,deque,list,set,map,queue,stack)

1、vector(连续的空间存储,可以使用[ ]操作符)可以快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间随机的插入、删除元素要慢。而且,如果一开始分配的空间不够时,有一个重新分配更大空间...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Queue和Deque
举报原因:
原因补充:

(最多只允许输入30个字)