浅析 Queue 和 Deque
终于开始了 LeetCode 的练习,看到 102. 二叉树的层序遍历 有种解法利用到了队列,想着挨个看看基础队列中的方法,便有了这篇文章。
基于 Java 对 Queue 以及 Deque(double ended queue) 实现进行学习介绍,JDK 版本:1.8.0_361。
全局概览
先看下 Queue 的注释:
- A collection designed for holding elements prior to processing. Besides basic Collection operations, queues provide additional insertion, extraction, and inspection operations:一个为了处理之前保存元素而设计的集合。除了 Collection 提供的基础操作外,还提供了额外的插入、提取、检查的操作。
- 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 实现,原因有以下两个:
- Vector 中的方法都有 synchronize 修饰,有性能问题(个人感觉不是重点,并发问题可以考虑:ConcurrentLinkedDeque)
- Vector 底层是数组,Stack 基于其实现,可以使用共有方法,对 LIFO 的特征造成破坏(感觉这个是重点)
基本方法
Queue
插入队尾:
boolean add(E e)
:插入成功返回 true,失败抛异常boolean offer(E e)
:插入成功返回 true,失败返回 false
查询队首元素:
E element()
:队列为空,抛异常E peek()
:队列为空,返回 null
删除队首元素:
E remove()
:队列为空,抛异常E poll()
:队列为空,返回 null
Deque
插入队首
void addFirst(E e)
:入队失败报异常boolean offerFirst(E e)
:入队失败返回 false
插入队尾
void addLast(E e)
:入队失败报异常boolean offerLast(E e)
:入队失败返回 false
删除队首
E removeFirst()
:队列为空抛异常E pollFirst()
:队列为空返回 null
删除队尾
E removeLast()
:队列为空抛异常E pollLast()
:队列为空返回 null
查询队首元素
E getFirst()
:队列为空抛异常E peekFirst()
:队列为空返回 null
查询队尾元素
E getLast()
:队列为空抛异常E peekLast()
:队列为空返回 null
推荐阅读
下述各种队列具体实现原理博客等空了分专题学习整理分享,敬请期待。
涉及到了堆、锁、
Delayed
接口。
深入理解Java PriorityQueue(和堆有关)
Java 阻塞队列(和锁有关)
Java 阻塞延迟队列 DelayQueue 原理及使用(和 Delayed
接口也有关)
浅析 Queue 和 Deque相关推荐
- Java集合List,Set,Map,Queue,Deque
集合是Java基础中非常重要的一部分,Java提供了非常丰富的集合API,了解各个集合的特点,怎么样在各种各样的场景中使用正确的集合,非常重要,也是一个Java程序员最基本的素养. 整体了解 Java ...
- Queue和Deque
Queue PriorityQueue:Object[]数组来实现二叉堆 ArrayQueue:Object[]数组+双指针 Queue和Deque的区别 Queue是单端队列,只能从一端插入元素,另 ...
- queue和deque的区别
queue和deque的区别 queue deque queue 单端队列 queue从队首弹出,先入先出 queue只能从队首删除元素, 但是两端都能访问. queue<int> q; ...
- List、Set、Map、Queue、Deque、Stack的遍历方式总结
一.List集合遍历 (有序.可重复) (1)iterator迭代器遍历(推荐) 原因:iterator对象遍历不同的List类型,返回的iterator对象实现不同,访问效率较高 List<S ...
- 源码阅读(34):Java中线程安全的Queue、Deque结构——ArrayBlockingQueue(4)
(接上文<源码阅读(33):Java中线程安全的Queue.Deque结构--ArrayBlockingQueue(3)>) 2.3.3.3.forEachRemaining() 方法 f ...
- 源码阅读(32):Java中线程安全的Queue、Deque结构——ArrayBlockingQueue(2)
(接上文<源码阅读(31):Java中线程安全的Queue.Deque结构--ArrayBlockingQueue(1)>) 本篇内容我们专门分析ArrayBlockingQueue中迭代 ...
- Java中集合遍历方式(List、Set、Queue、Deque、Stack、Map)
什么是集合?通俗的讲,集合就是存储一组数据的容器,那么,相比较于同样是存储数据的数组,集合的优势就体现在集合的长度是可变的,而数组的长度是固定的.在我们常见的集合中,主要有两大类: Collectio ...
- Queue与Deque的区别
前言 在研究java集合源码的时候,发现了一个很少用但是很有趣的点:Queue以及Deque,平常在写leetcode经常用LinkedList向上转型Deque作为栈或者队列使用,但是一直都不知 ...
- 5.Queue和Deque的区别与联系
java的Deque与Queue 1.Queue接口(单向队列) Queue接口,是集合框架Collection的子接口,是一种常见的数据结构,遵循先进先出的原则. 是基于链表来进行实现,的单向队列. ...
最新文章
- python就业方向有哪些-目前Python这么火,Python有哪些就业方向?
- WEB前端笔试题(4)
- 【转】图形学基础之透视校正插值
- mysql 更新表格数据_mysql更新表格数据库数据
- Docker-machine创建虚机时停在虚机启动的提示上,并且创建的虚机显示Ip Not found...
- 分布式事务,EventBus 解决方案:CAP【中文文档】
- centos7安装svn客户端和使用
- 揭开网络编程常见API的面纱【下】
- Thinking In Design Pattern——Unit Of Work(工作单元)模式探索
- Yum安装Memcache
- 如何查看Android项目的gradle版本和路径
- R语言手动安装包-以ggplot2为例
- ESP8266开发——安信可IDE环境搭建
- 定义一个基类BAse,有两个公有成员函数fn1,fn2;私有派生出derived类,如何通过derived类的对象调用基类的函数fn1;
- 用html做龙卷风特效,抖音HTML龙卷风特效代码是啥?
- windos无法对计算机进行,电脑提示windows无法完成格式化如何解决
- Mavlink心跳/连接协议
- 【Java】If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
- 用浏览器的油猴子脚本调用IDM下载百度云盘中的资料
- 创作者基金新上线互动类型 NFTs,快来为你的体验添砖加瓦吧~
热门文章
- FLASH--M25P40/M25P10
- sql2000安装成功但是服务器显示为空,安装sql2000时出现“安装程序配置服务器失败”...
- 福利图网站的正确使用姿势
- 随手记高管专访之CEO谷风专访——随手记理财安全吗
- “借给别人5000块,我就能一口口吃掉他一套房,打官司也告不倒我!”
- python微软雅黑字体_win10+python3.7下matplotlib显示中文,可使用微软雅黑.md
- 10UEC++吃豆人[吃超级豆子和改变游戏状态]
- 58同城笔试(2021/10/23)
- Promise、THEN链的穿透/顺延机制、关于Promise.all/any/race 三个方法的研究、AJAX的串行和并行
- 蓝桥杯单片机第四届省赛题详细讲解(模拟智能灌溉系统)