queue

在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。除了基本的 Collection 操作外,队列还提供其他的插入、提取和检查操作。

每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,具体取决于操作)。

抛出异常 返回特殊值

插入 add(e) offer(e)

移除 remove() poll()

检查 element() peek()

队列通常(但并非一定)以 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 queue = new LinkedList();

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());

}

}

Deque

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

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

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

抛出异常 返回特殊值 抛出异常 返回特殊值

插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)

移除 removeFirst() pollFirst() removeLast() pollLast()

检查 getFirst() peekFirst() getLast() peekLast()

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

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

queue方法 等效Deque方法

add(e) addLast(e)

offer(e) offerLast(e)

remove() removeFirst()

poll() pollFirst()

element() getFirst()

peek() peekFirst()

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

堆栈方法 等效Deque方法

push(e) addFirst(e)

pop() removeFirst(e)

peek() peekFirst()

java lifo 队列_1.8 Java 队列 Queue、双端队列 Deque - Java 知识总结与学习相关推荐

  1. 6-5-2:STL之stack和queue——双端队列deque

    文章目录 双端队列-deque 双端队列-deque deque是一种双向开口的连续线性空间.所谓双向开口,意思就是可以在头尾两端分别进行元素的插入和删除操作 deque的出现是为了解决融合vecto ...

  2. java 队列_java自学之路-08双端队列

    用java实现双向队列 运行结果:

  3. 面经手册 · 第9篇《队列是什么?什么是双端队列、延迟对列、阻塞队列,全是知识盲区!》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

  4. Java 集合深入理解(10):Deque 双端队列

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 什么是 Deque Deque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋 ...

  5. java双端队列工作密取,同步器皿、并发容器、阻塞队列、双端队列与工作密取...

    同步容器.并发容器.阻塞队列.双端队列与工作密取 在多线程的开发中经常会碰到数据的并发修改,并发存取,因此正确的使用不同的容器很关键,直接影响到数据的正确性.下面主要记录下三种重要的队列,以及一种非常 ...

  6. Queue(队列)-Dequeue(双端队列)-Set-Map及迭代器 等相关方法

    一.队列Queue 1.是一个接口                     作用:使数据只能一端进,一端出.--先进先出,经常发生增删         2.LinkedList:就实现了此接口     ...

  7. 单向队列、双端队列、栈的模型实现

    引言 自己实现简单的队列.栈的逻辑结构. 队列都包含头和尾两个指针,简单的单向队列只能在一端(如:head端)入列,在另一端(如:tail 端)出列:双端队列可以在 head 进出,也可以在 tail ...

  8. 数据结构与算法(Python版) | (6) 线性结构---队列、双端队列和列表

    本专栏主要基于北大的数据结构与算法教程(Python版)进行整理,包括课程笔记和OJ作业. 课程链接 1. 队列抽象数据类型及Python实现 什么是队列? 队列是一种有次序的数据集合,其特征是: 1 ...

  9. 广度优先搜索BFS进阶(一):多源BFS、优先队列BFS、双端队列BFS

    一.多源BFS 在上一篇博客:广度优先搜索BFS基础中,我们接触到的BFS均是单起点(单源)的,但是对于某一些问题,其有多个起点,此类问题我们称为多源BFS问题.先思考下面一道例题: 1.腐烂的橘子 ...

最新文章

  1. pandas使用iloc函数将dataframe的所有数据行反序(reverse the order of rows in dataframe)
  2. linux sudo 实现原理
  3. SQL_server 的基本操作
  4. AngularJS+RequireJS集成环境
  5. pyinstaller打包pyqt文件(转)
  6. mysql 统计_告别硬编码,mysql 如何实现按某字段的不同取值进行统计
  7. 分析绕过一款适合练手的云WAF
  8. Camel 2.11 –没有Spring的Camel Web应用程序
  9. vue保存图片到手机相册_手机照片误删了怎么找回?这三个方法轻松搞定,亲测有效...
  10. 云小课 | 到底什么是区块链?
  11. java中 t无法对齐,java – 即使X应匹配T,也无法将X转换为T?
  12. 《快学Scala》第6章 对象 练习
  13. MOSFET与三极管
  14. android七牛短视频sdk源码,七牛短视频sdk,七牛android直播端必须用七牛提供的sdk吗...
  15. 悬浮细胞、淋巴细胞培养常见失败原因及解决方案
  16. CGAN(conditional GANs)
  17. 二叉树存储结构及实现
  18. 多用户博客BLOG系统大全
  19. OpenCV+Python识别车牌和字符分割
  20. 这届网友实在是太有才了!用python爬取15万条《我是余欢水》弹幕

热门文章

  1. 移动设备感染率及物联网设备安全漏洞数量创下历史新高
  2. SQL操作语句中的注意点
  3. python字符串格式化之学习笔记
  4. Ubuntu常用命令大全[显示桌面]
  5. WIP模块常用表结构
  6. Java基础篇:IO流
  7. 原来你离进大厂,只差这些面试题!
  8. 开发计费系统中学到的 5 件事
  9. 某程序员求助:隔壁组组长常常微信骚扰自己怎么办?组长和自己都是男生,自己是双性恋,但想找个年轻的!网友:信息量太大!...
  10. 我问占小狼到底什么是面向对象编程?他转头就走。