Java 双端队列接口 Deque
Deque 是一种支持在两端进行操作的线性结构,包含了栈和队列的功能。Java 中建议使用 Dqueue 的实现来替代遗留的 Stack 类。本文将介绍 Deque 提供的主要 API。
双端操作 API
Deque 的核心 API 可以按照操作头部和尾部分为两类,并可以进一步按照抛出异常和返回特殊值进行进一步划分。
| 头部操作 | 尾部操作 | |||
| 抛出异常 | 返回特殊值 | 抛出异常 | 返回特殊值 | |
| 插入 | addFirst(e) |
offerFirst(e) |
addLast(e) |
offerLast(e) |
| 删除 | removeFirst() |
pollFirst() |
removeLast() |
pollLast() |
| 获取 | getFirst() |
peekFirst() |
getLast() |
peekLast() |
需要注意的是,某些 Deque 的实现(如 ArrayDeque)在调用 offerFirst(e), offerLast(e) 时,若传入的 e 为 null,仍然会抛出 NullPointerEaception,而另一些实现则不会(如 LinkedList)。
descendingIterator()
返回一个迭代器,迭代器从尾部往头部方向返回元素。
removeFirstOccurrence(Object o) / removeLastOccurrence(Object o)
移除首次/最后出现的元素 o,Deque 中可以放入重复元素,首次出现的意思是距离头部最近的与 o 相等的元素,同理,最后出现的意思是距离尾部最近的与 o 相等的元素。
队列
Deque 继承了 Queue 接口,因此也提供了队列相关操作的东西。进行队列的操作本质是双端队列的 API 换了个名字,只需要将名字对应起来即可。
| Queue 方法 | 对应的 Deque 方法 |
|---|---|
add(e) |
addLast(e) |
offer(e) |
offerLast(e) |
remove() |
removeFirst() |
poll() |
pollFirst() |
element() |
getFirst() |
peek() |
peekFirst() |
栈
与队列类似,栈的 API 也时部分双端队列 API 换了了名字。
| Stack 方法 | 对应的 Deque 方法 |
|---|---|
push(e) |
addFirst(e) |
pop() |
removeFirst() |
peek() |
peekFirst() |
Deque 的实现
Deque 是线性结构,实现方式分类两类,一类基于数组,典型代表是 ArrayDeque;另一类基于链表,典型代表是 LinkedList。这两个典型代表的详细介绍参考下面两篇博客:
ArrayDeque API 与算法分析
LinkedList 分析
Java 双端队列接口 Deque的更多相关文章
- 6.基本数据结构-双端队列(Deque)
一.双端队列(Deque) - 概念:deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变. - 特性:deque 特殊之处在于添加和删除项是非限制 ...
- 六.基本数据结构-双端队列(Deque)
一.双端队列(Deque) - 概念:deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变. - 特性:deque 特殊之处在于添加和删除项是非限制 ...
- 队列(Queue)\双端队列(Deque)
队列(Queue)\双端队列(Deque) 队列(Queue) 双端队列(Deque) 算法应用 队列(Queue) 特点: 和栈不同,队列的最大特点是先进先出(FIFO),就好像按顺序排队一样.对于 ...
- 双端队列篇deque SDUT OJ 双向队列
双向队列 Time Limit: 1000MS Memory limit: 65536K 题目描述 想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首:两头都可以做出队,入队的操 ...
- 双端队列 【deque】
题目链接:https://ac.nowcoder.com/acm/contest/1071/D 还是第一次简单运用双端队列.顾名思义:队列的头尾都可以进行插入跟删除操作. 存在于头文件 deque 中 ...
- 数据结构之双端队列(Deque)
1,双端队列定义 双端队列:其两端都可以入列和出列的数据结构,如下图所示,队列后面(rear)可以加入和移出数据,队列前面(front)可以加入和移出数据 双端队列操作: deque=Deque() ...
- 计蒜客 A2232.程序设计:蒜厂年会-单调队列(双端队列(STL deque)实现)滑窗维护最小前缀和
程序设计:蒜厂年会 问答问题反馈 只看题面 16.79% 1000ms 262144K 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币. ...
- Java数据结构——双端队列
双端队列(Deque)双端队列是指允许两端都可以进行入队和出队操作的队列,其元素的逻辑结构仍是线性结构.将队列的两端分别称为前端和后端,两端都可以入队和出队.Deque继承自Queue接口,Deque ...
- deque双端队列容器
//deque双端队列容器 //deque双端队列容器与vector一样,采用线性表顺序存储结构,但与vector不同的是, //deque采用的分块线性存储结构来存储数据,每块的大小一般为512字节 ...
随机推荐
- js内存泄漏的问题?
内存泄漏指任何对象在您不再拥有或需要它之后仍然存在. 垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量.如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环 ...
- XML文件格式
首行是需要对xml版本声明<?xml version="1.0" ecoding="UTF-8"?> 语言可根据需要修改 在编写xml的几个注意点 ...
- 计算机网络——HTTP知识点整理
1.HTTP简介 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使网络传输减少.它 ...
- shell--检查apache是否启动脚本
#首先我们需要检查apache是否以启动,这里我们用到的说nmap命令,Linux默认情况下是没有安装nmap命令的. #那么我们需要安装下nmap,安装的命令很简单:yum -y install n ...
- python协程需要注意的
python协程需要注意的点 都在注释里 # -*- coding: utf-8 -*- import asyncio import time from geeker import schedule ...
- 数据结构与算法——图(游戏中的自动寻路-A*算法)
在复杂的 3D 游戏环境中如何能使非玩家控制角色准确实现自动寻路功能成为了 3D 游戏开 发技术中一大研究热点.其中 A*算法得到了大量的运用,A*算法较之传统的路径规划算法,实时性更高.灵活性更强, ...
- GitLab的基本了解和使用
使用前提 GitLab账号 安装好git VSCODE && 配置GitPath 在vscode里配置GitPath file-preferences-setting 在search ...
- 五、Jmeter的目录结构
进入安装Jmeter可以看到路径 bin目录 jmeter.bat windows的启动文件 jmeter.log jmeter运行日志文件 jmeter.sh linux的启动文件 jmeter. ...
- c++日常小问题
语法解析问题. 当给一个变量构造函数传递一个临时变量,而不是命名的变量,c++编译器会将其解析为函数声明,而不是类型对象的定义. class hello { void operator()() { s ...
- ceph新加存储节点
随着业务的扩展,原有的存储池不够用了,这时我们就需要给ceph添加新的存储节点,这里以新加ceph-host-05节点为例 准备工作 给所有节点hosts文件添加10.30.1.225 ceph- ...