【Java】Java双端队列Deque使用详解

【Java】Java双端队列Deque使用详解Deque是一个双端队列接口,继承自Queue接口,它们共同的实现类是LinkedList。Deque的功能很强大:代替普通队列Queue:先进先出、队尾进队头出可以作为双端队列:队尾和队头都可以进出还可以作为堆栈使用:先进后出、只能从一端进出注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。jdk文档中关于Deque的使用介…

大家好,又见面了,我是你们的朋友全栈君。

Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。

关于Queue的介绍可以看上一篇文章:Java队列Queue使用详解

Deque有三种用途:

  • 普通队列(一端进另一端出):
    Queue queue = new LinkedList()Deque deque = new LinkedList()
  • 双端队列(两端都可进出)
    Deque deque = new LinkedList()
  • 堆栈
    Deque deque = new LinkedList()

注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。Deque堆栈操作方法:push()、pop()、peek()。

Deque是一个线性collection,支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。

此接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是专为使用有容量限制的 Deque 实现设计的;在大多数实现中,插入操作不能失败。

下表总结了上述 12 种方法:

第一个元素 (头部) 最后一个元素 (尾部)
抛出异常 特殊值 抛出异常 特殊值
插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
删除 removeFirst() pollFirst() removeLast() pollLast()
检查 getFirst() peekFirst() getLast() peekLast()

Deque接口扩展(继承)了 Queue 接口。在将双端队列用作队列时,将得到 FIFO(先进先出)行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。从 Queue 接口继承的方法完全等效于 Deque 方法,如下表所示:

Queue方法 等效Deque方法
add(e) addLast(e)
offer(e) offerLast(e)
remove() removeFirst()
poll() pollFirst()
element() getFirst()
peek() peekFirst()

双端队列也可用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留 Stack 类。在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。堆栈方法完全等效于 Deque 方法,如下表所示:

堆栈方法 等效Deque方法
push(e) addFirst(e)
pop() removeFirst()
peek() peekFirst()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159030.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python爬虫——淘宝书包

    python爬虫——淘宝书包importreimportrequestsdefgetHTMLText(url):try:headers={‘user-agent’:’Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/76.0.3809….

    2022年6月17日
    41
  • 前端开发必备站点汇总

    常用前端手册:http://caniuse.com/http://www.w3school.com.cn/http://www.runoob.com/http://www.css88.com/

    2021年12月28日
    43
  • 视频地址获取

    软件具体名字就不说了哈,首先贴出视频的网页地址:http://www.365yg.com/a6542366077089743367/首先需要获取视频的videoId,直接请求该url,然后match匹配:Patternpattern=Pattern.compile("videoId:\'(.+)\’");Matchermatcher=pattern.ma…

    2022年4月8日
    61
  • nacos和eureka注册中心对比 and CAP定律理解

    1.CP和AP不可能同时满足2.P代表分区容错,在整个分布式系统中某个节点服务挂掉了,并不影响整个系统的运作和使用,因为他可以在稍后或者通过切换可用节点立即恢复使用3.C:写操作之后的读操作,必须返回该值。注册中心集群中:leader的作用,所有的写操作都依赖于leader来完成,为了保证数…

    2022年4月6日
    130
  • Apache、Nginx、IIS防盗链方法「建议收藏」

    Apache、Nginx、IIS防盗链方法「建议收藏」防盗链?要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。一来可以追溯上一个入站地址是什么,二来对于资源文件,可以跟踪到包含显示他

    2022年7月23日
    9
  • java数据库连接池有哪些_常用的数据库连接池

    java数据库连接池有哪些_常用的数据库连接池池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。其他几种池的设计思想也是如此,池技术的优势是…

    2025年12月12日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号