首页 > 其他分享 >栈与队列基础篇(二)--Deque

栈与队列基础篇(二)--Deque

时间:2024-03-27 16:44:06浏览次数:19  
标签:返回 Deque ArrayDeque -- 元素 队列 移除

结合栈与队列,请详细说一下Deque都有什么方法:

Deque 接口(Double Ended Queue,双端队列)提供了一系列方法,既可以用作栈,也可以用作队列。下面是 Deque 接口中常用的方法:

  1. 栈操作方法:

    • void push(E e): 将元素推入栈顶。
    • E pop(): 弹出栈顶元素,并将其从栈中移除。
    • E peek(): 获取栈顶元素,但不移除它。
  2. 队列操作方法:

    • void addFirst(E e): 将元素插入到队列的开头。
    • void addLast(E e): 将元素插入到队列的末尾。
    • boolean offerFirst(E e): 将元素插入到队列的开头,如果成功则返回 true。
    • boolean offerLast(E e): 将元素插入到队列的末尾,如果成功则返回 true。
    • E removeFirst(): 移除并返回队列开头的元素。
    • E removeLast(): 移除并返回队列末尾的元素。
    • E pollFirst(): 移除并返回队列开头的元素,如果队列为空则返回 null。
    • E pollLast(): 移除并返回队列末尾的元素,如果队列为空则返回 null。
    • E getFirst(): 获取队列开头的元素,但不移除它。
    • E getLast(): 获取队列末尾的元素,但不移除它。
    • E peekFirst(): 获取队列开头的元素,如果队列为空则返回 null。
    • E peekLast(): 获取队列末尾的元素,如果队列为空则返回 null。
  3. 其他常用方法:

    • boolean isEmpty(): 判断队列是否为空。
    • int size(): 返回队列中的元素数量。
    • void clear(): 清空队列中的所有元素。

这些方法允许你在 Deque 对象上实现栈和队列的操作。你可以根据需要选择合适的方法来实现特定的功能。

需要注意的是,Deque 是一个接口,它有多个具体实现类,例如 ArrayDeque 和 LinkedList。你可以根据实际需求选择适合的实现类来创建 Deque 对象。

 

ArrayDeque<Integer> 是 Deque<Integer> 的一个具体实现类。它提供了双端队列的功能,并使用数组作为内部数据结构。

由于之前出现了混淆,以下是正确的区别:

  1. 继承关系:ArrayDeque<Integer> 实现了 Deque<Integer> 接口。因此,它支持 Deque 接口中定义的所有方法,包括栈和队列的操作。

  2. 内部数据结构:ArrayDeque<Integer> 使用循环数组(circular array)作为内部数据结构。这种数据结构允许在两端进行高效的插入和删除操作,使其既可以用作栈,也可以用作队列。

  3. 动态扩容:ArrayDeque<Integer> 的内部数组会根据需要进行动态扩容,以容纳更多的元素。它具有自动调整容量的能力,可以根据实际需求进行扩展,而不受固定容量的限制。

  4. 线程安全性:ArrayDeque<Integer> 不是线程安全的,它不提供多线程并发访问的保护机制。如果在多线程环境中使用 ArrayDeque<Integer>,需要采取适当的同步措施来确保线程安全性。

因此,ArrayDeque<Integer> 是 Deque<Integer> 接口的一个具体实现类,它使用循环数组作为内部数据结构,提供了双端队列的功能。你可以使用 ArrayDeque<Integer> 来创建一个双端队列,并根据需要执行栈和队列的操作。

标签:返回,Deque,ArrayDeque,--,元素,队列,移除
From: https://www.cnblogs.com/18191xq/p/18099664

相关文章

  • 律甲法务OA平台:信鸥科技引领法律行业新篇章
    随着信息技术的飞速发展,法律行业也迎来了数字化转型的重要时刻。在这个信息化、智能化的时代,如何运用科技手段提升法律服务的质量和效率,成为法律行业亟待解决的问题。信鸥科技,作为业界的佼佼者,凭借其深厚的技术积累和丰富的行业经验,倾力打造了一款专为法律行业量身定做的法务办......
  • 【2G 50元/年 4G 618/3年!】支持比价必赔 送抽奖机会 京东云服务器推荐 附阿里云 腾讯
     《最新对比表》已更新在文章头部—腾讯云文档,文章具有时效性,请以腾讯文档为准!【腾讯文档实时更新】云服务器1分钟教会你如何选择教程https://docs.qq.com/document/DV0RCS0lGeHdMTFFV?tab=000003​当前活动:采购季,各厂商活动已更新,适用于博客建站(2-4G)、小型游戏(4-8G)、大......
  • pat mooc 浙江大学数据结构 01-复杂度1 最大子列和问题
    输入格式:输入第1行给出正整数K(≤100000);第2行给出K个整数,其间以空格分隔。输出格式:在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。输入样例:6-211-413-5-2输出样例:20#include<stdio.h>intmain(){ intk,n; intsum=0; intm......
  • sychronized和ReentrantLock对比
    共同点①都用于多线程对共享对象的访问。②都是可重入锁。③都保证了可见性和互斥性。不同点①ReentrantLock显示获取和释放锁;synchronized隐式获取和释放锁。②Reentrant可响应中断、可轮询,为处理锁提供了更强的灵活性。③ReentrantLock是API级别的,synchronized是JVM级......
  • 利用“AI换脸”冒充的求职者越来越多,HR该怎么发现
    2022年7月,美国联邦调查局互联网犯罪投诉中心(IC3)发布了一份新的公告,该公告警告说,越来越多的诈骗分子正在使用“深度伪造”技术在远程职位面试中冒充求职者,骗取企业薪资、盗取企业的商业机密。  新冠疫情推动远程办公普及。统计显示,截至2022年,大约35%的人可以全职远程工......
  • 深入理解 React 中的 children props 和 render props
    深入理解React中的childrenprops和renderprops在React中,childrenprops和renderprops是两种常见的组件复用模式,它们都可以帮助我们更好地组织和复用组件代码。虽然它们的实现方式有所不同,但都能够有效地实现组件之间的数据传递和功能共享。childrenpropsch......
  • 想成为红队大佬却不知道学习路线???(附红队之路-配套源码工具)
    红队到底是做什么的?在红队中,您需要仿真、模拟或以其他方式扮演某个、某组入侵者或理论上的假想敌。这些活动通常以单独的演习或练习的形式出现,其目的是训练蓝队,蓝队由负责各种防御工事的小组或个人组成。并且,这种对抗可以在任何层面上开展,从应用程序的安全性到主动防御设施,等......
  • java中的什么是值传递,什么是引用传递
    值传递(PassbyValue):值传递意味着在方法调用时,实际参数的值被传递给方法中的形式参数,即在方法内部修改形参的值不会影响实参的值。Java中的基本数据类型(如int、float、double等)就是值传递的典型例子。publicclassMain{publicstaticvoidmain(String[]args){......
  • C++高频面试知识总结 part1
    面向对象1.什么是类?2.面向对象程序设计思想?3.多态的实现?4.动态多态的作用?5.动态绑定的实现?6.纯虚函数的作用以及实现?7.虚函数表如何维护?推荐阅读8.C++struct和类的区别?9.C++中类成员的访问权限?1.什么是类?是一种用户定义的数据类型,包含了数据成员和函数成员。数据成......
  • Python基础
    基础1.1常量具有字面意义的,按照字面意义使用他们的值,不能改变值。例如1、3.8、3.4e-3这样的数,或者是’Thisisastring’、“It’sastring!”这样的字符串。1.2数三种类型:整数、浮点数和复数整数:2浮点数:3.8、3.4e-3复数:(-5+4j)、(2.3-4.6j)在Python中不用区分'lon......