终于开始了 LeetCode 的练习,看到 102. 二叉树的层序遍历 有种解法利用到了队列,想着挨个看看基础队列中的方法,便有了这篇文章。

基于 Java 对 Queue 以及 Deque(double ended queue) 实现进行学习介绍,JDK 版本:1.8.0_361。

全局概览


先看下 Queue 的注释:

  1. A collection designed for holding elements prior to processing. Besides basic Collection operations, queues provide additional insertion, extraction, and inspection operations:一个为了处理之前保存元素而设计的集合。除了 Collection 提供的基础操作外,还提供了额外的插入、提取、检查的操作。
  2. Queues typically, but do not necessarily, order elements in a FIFO (first-in-first-out) manner. Among the exceptions are priority queues, which order elements according to a supplied comparator, or the elements’ natural ordering, and LIFO queues (or stacks) which order the elements LIFO (last-in-first-out). :Queue(队列)一般以 FIFO(先进先出)的方式对元素进行排序(但是不一定按照:优先队列「根据提供的 comparator 或者元素自然排序」以及 LIFO(后入先出) 队列)。

再看下 Deque 的注释:
A linear collection that supports element insertion and removal at both ends:一个支持两端都支持元素插入删除的线性集合。

扩展下,当需要 LIFO 队列时不推荐使用 Stack,Stack 基于 Vector 实现,原因有以下两个:

  1. Vector 中的方法都有 synchronize 修饰,有性能问题(个人感觉不是重点,并发问题可以考虑:ConcurrentLinkedDeque)
  2. Vector 底层是数组,Stack 基于其实现,可以使用共有方法,对 LIFO 的特征造成破坏(感觉这个是重点)

基本方法

Queue

插入队尾:

  1. boolean add(E e):插入成功返回 true,失败抛异常
  2. boolean offer(E e):插入成功返回 true,失败返回 false

查询队首元素:

  1. E element():队列为空,抛异常
  2. E peek():队列为空,返回 null

删除队首元素:

  1. E remove():队列为空,抛异常
  2. E poll():队列为空,返回 null

Deque

插入队首

  1. void addFirst(E e):入队失败报异常
  2. boolean offerFirst(E e):入队失败返回 false

插入队尾

  1. void addLast(E e):入队失败报异常
  2. boolean offerLast(E e):入队失败返回 false

删除队首

  1. E removeFirst():队列为空抛异常
  2. E pollFirst():队列为空返回 null

删除队尾

  1. E removeLast():队列为空抛异常
  2. E pollLast():队列为空返回 null

查询队首元素

  1. E getFirst():队列为空抛异常
  2. E peekFirst():队列为空返回 null

查询队尾元素

  1. E getLast():队列为空抛异常
  2. E peekLast():队列为空返回 null

推荐阅读

下述各种队列具体实现原理博客等空了分专题学习整理分享,敬请期待。

涉及到了堆、锁、Delayed 接口。

深入理解Java PriorityQueue(和堆有关)

Java 阻塞队列(和锁有关)

Java 阻塞延迟队列 DelayQueue 原理及使用(和 Delayed 接口也有关)

浅析 Queue 和 Deque相关推荐

  1. Java集合List,Set,Map,Queue,Deque

    集合是Java基础中非常重要的一部分,Java提供了非常丰富的集合API,了解各个集合的特点,怎么样在各种各样的场景中使用正确的集合,非常重要,也是一个Java程序员最基本的素养. 整体了解 Java ...

  2. Queue和Deque

    Queue PriorityQueue:Object[]数组来实现二叉堆 ArrayQueue:Object[]数组+双指针 Queue和Deque的区别 Queue是单端队列,只能从一端插入元素,另 ...

  3. queue和deque的区别

    queue和deque的区别 queue deque queue 单端队列 queue从队首弹出,先入先出 queue只能从队首删除元素, 但是两端都能访问. queue<int> q; ...

  4. List、Set、Map、Queue、Deque、Stack的遍历方式总结

    一.List集合遍历 (有序.可重复) (1)iterator迭代器遍历(推荐) 原因:iterator对象遍历不同的List类型,返回的iterator对象实现不同,访问效率较高 List<S ...

  5. 源码阅读(34):Java中线程安全的Queue、Deque结构——ArrayBlockingQueue(4)

    (接上文<源码阅读(33):Java中线程安全的Queue.Deque结构--ArrayBlockingQueue(3)>) 2.3.3.3.forEachRemaining() 方法 f ...

  6. 源码阅读(32):Java中线程安全的Queue、Deque结构——ArrayBlockingQueue(2)

    (接上文<源码阅读(31):Java中线程安全的Queue.Deque结构--ArrayBlockingQueue(1)>) 本篇内容我们专门分析ArrayBlockingQueue中迭代 ...

  7. Java中集合遍历方式(List、Set、Queue、Deque、Stack、Map)

    什么是集合?通俗的讲,集合就是存储一组数据的容器,那么,相比较于同样是存储数据的数组,集合的优势就体现在集合的长度是可变的,而数组的长度是固定的.在我们常见的集合中,主要有两大类: Collectio ...

  8. Queue与Deque的区别

    前言 ​ 在研究java集合源码的时候,发现了一个很少用但是很有趣的点:Queue以及Deque,平常在写leetcode经常用LinkedList向上转型Deque作为栈或者队列使用,但是一直都不知 ...

  9. 5.Queue和Deque的区别与联系

    java的Deque与Queue 1.Queue接口(单向队列) Queue接口,是集合框架Collection的子接口,是一种常见的数据结构,遵循先进先出的原则. 是基于链表来进行实现,的单向队列. ...

最新文章

  1. python就业方向有哪些-目前Python这么火,Python有哪些就业方向?
  2. WEB前端笔试题(4)
  3. 【转】图形学基础之透视校正插值
  4. mysql 更新表格数据_mysql更新表格数据库数据
  5. Docker-machine创建虚机时停在虚机启动的提示上,并且创建的虚机显示Ip Not found...
  6. 分布式事务,EventBus 解决方案:CAP【中文文档】
  7. centos7安装svn客户端和使用
  8. 揭开网络编程常见API的面纱【下】
  9. Thinking In Design Pattern——Unit Of Work(工作单元)模式探索
  10. Yum安装Memcache
  11. 如何查看Android项目的gradle版本和路径
  12. R语言手动安装包-以ggplot2为例
  13. ESP8266开发——安信可IDE环境搭建
  14. 定义一个基类BAse,有两个公有成员函数fn1,fn2;私有派生出derived类,如何通过derived类的对象调用基类的函数fn1;
  15. 用html做龙卷风特效,抖音HTML龙卷风特效代码是啥?
  16. windos无法对计算机进行,电脑提示windows无法完成格式化如何解决
  17. Mavlink心跳/连接协议
  18. 【Java】If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
  19. 用浏览器的油猴子脚本调用IDM下载百度云盘中的资料
  20. 创作者基金新上线互动类型 NFTs,快来为你的体验添砖加瓦吧~

热门文章

  1. FLASH--M25P40/M25P10
  2. sql2000安装成功但是服务器显示为空,安装sql2000时出现“安装程序配置服务器失败”...
  3. 福利图网站的正确使用姿势
  4. 随手记高管专访之CEO谷风专访——随手记理财安全吗
  5. “借给别人5000块,我就能一口口吃掉他一套房,打官司也告不倒我!”
  6. python微软雅黑字体_win10+python3.7下matplotlib显示中文,可使用微软雅黑.md
  7. 10UEC++吃豆人[吃超级豆子和改变游戏状态]
  8. 58同城笔试(2021/10/23)
  9. Promise、THEN链的穿透/顺延机制、关于Promise.all/any/race 三个方法的研究、AJAX的串行和并行
  10. 蓝桥杯单片机第四届省赛题详细讲解(模拟智能灌溉系统)