【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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql解锁命令_mysql锁表查询和解锁操作

    mysql解锁命令_mysql锁表查询和解锁操作解除正在死锁的状态有两种方法:第一种:1.查询是否锁表showOPENTABLESwhereIn_use>0;2.查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程)showprocesslist3.杀死进程id(就是上面命令的id列)killid第二种:1.查看下在锁的事务SELECT*FROMINFORMATION_SCHEMA.IN…

    2022年5月22日
    295
  • 分配空间不足问题

    分配空间不足问题

    2021年8月26日
    56
  • IPv4与IPv6有什么不同,如何升级到IPv6

    自1981年JonPostel在RFC791中定义了IPv4到现在,IPv4在IP领域称王已有30余年,并一度成为IP的代名词,但是IPv4面临枯竭的危机,已经失去了实用价值。到1998年,互联网工程任务组(IETF)正式确立了IPv6后继协议,用于处理IPv4地址耗尽的长期预期问题,旨在取代IPv4并成为互联网的骨干。如今,网络世界正在缓慢地向IPv6标准过渡。根据据谷歌公班尼路统计,20…

    2022年4月9日
    54
  • 解释OpenStack组件介绍RabbitMQ的用处_MySQL分布式集群搭建

    解释OpenStack组件介绍RabbitMQ的用处_MySQL分布式集群搭建一、前期环境:准备三台全新的虚拟机关闭防火墙和selinux以防出现错误。更改三台虚拟机的主机名并配置好网卡:hostnamectlset-hostname主机名。修改三台虚拟机文件:vi/etc/hosts将三台主机的IP地址以及主机名写入其中。(注:三台虚拟机之间一定要相互ping通)。……

    2025年10月22日
    4
  • 构建samba文件共享服务器_家庭文件服务器搭建方案

    构建samba文件共享服务器_家庭文件服务器搭建方案本文主要讲述如何使用Samba软件在Linux系统上搭建局域网中可以访问的文件共享服务器。

    2022年9月24日
    2
  • MySql必知必会内容导图

    MySql必知必会思维导图1.DBMS分类(1)关系数据库系统(2)面向对象的数据库系统(3)对象关系数据库系统对象关系数据库系统是在传统的关系数据模型基础上提供元祖,数据,集合等更为丰富

    2021年12月28日
    47

发表回复

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

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