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字节 ...
随机推荐
- 团队作业part3--需求改进&系统设计
一.需求&原型改进 1. 需求的修改 借鉴其他开发游戏的组的经验以及老师的建议,针对之前的需求分析,作出如下修改: 问题1:这款游戏对玩家的吸引力与驱动性有所不足. 修改1:增加成就系统与排行 ...
- AcWing 276. I-区域
题目链接 设 \(0\) 为单调伸长, \(1\) 为单调伸短. 设 \(f[i][j][l][r][x(0 / 1)][y (0 / 1)]\) 为第 \(i\) 行,已经选出\(j\)个格子,第\ ...
- Angular:使用前端proxy代理解决跨域问题
①在项目文件的根目录下新建文件proxy.config.json { "/": { "target": "http://127.0.0.1:3000& ...
- MySQL最经典50道练习题
表名和字段 学生表 Student(s_id,s_name,s_birth,s_sex):学生编号.学生姓名.出生年月.学生性别. 课程表 Course(c_id,c_name,t_id):课程编号. ...
- Docker跑项目中常见的中间件
声明: 本章只作为记录 前端时间跑项目,发现每次都需要启动大量的中间件.在Windows 上启动特别麻烦 就想着写篇文章总结一下,把所有的 中间件全放服务器上启动 ,下次 直接复制黏贴命令就好了. 例 ...
- 【收藏】关于元数据(Metadata)和元数据管理,这是我的见过最全的解读!
本文主要从元数据的定义.作用.元数据管理现状.管理标准和元数据管理功能等方面讲述了我对元数据(Metadata)和元数据管理的认知及理解. 元数据管理 一.元数据的定义 按照传统的定义,元数据(Met ...
- Python3和高性能全文检索引擎Redisearch进行交互
安装 pip install redisearch 使用 from redisearch import Client, TextField # 创建一个客户端与给定索引名称 client = Clie ...
- HCIP -- OSPF 总结
OSPF:Open Shortest path First :开方式最短路径优先 一.基础知识: 1.使用范围:IGP 2.协议算法特点:链路状态型路由协议,SPF算法 3.协议是否传递网络掩码:是 ...
- C# HTML帮助类 包括补全标签 截取HTML字符串包含标签
public static class HtmlHelper { /// <summary> /// 按文本内容长度截取HTML字符串(支持截取带HTML代码样式的字符串) /// < ...
- webform中DropdownList绑定多个字段
说明 ListItem中有Attributes属性,手动创建一个自定义属性,赋值需要绑定的字段的值. 这样的话,前台js也可以获取到,能够显示到前台html,进行控制. 代码 foreach(Data ...