一.概述

Deque接口是Queue接口的子接口,它代表一个双端队列,该队列允许从两端来操作队列中的元素。Deque不仅可以当成双端队列使用,而且可以当成栈来使用。

ArrayDeque集合是Deque接口的实现类,它是一个基于数组的双端队列,创建Deque时同样可以指定一个numElements参数,该参数用于指定Object[]数组的长度;如果不指定该参数,Deque底层数组长度为16。

二.常用方法

1.添加元素

  • addFirst(E e)在数组前面添加元素
    addLast(E e)在数组后面添加元素
    offerFirst(E e) 在数组前面添加元素,并返回是否添加成功
    offerLast(E e) 在数组后天添加元素,并返回是否添加成功

2.删除元素

  • removeFirst()删除第一个元素,并返回删除元素的值,如果元素为null,将抛出异常
    pollFirst()删除第一个元素,并返回删除元素的值,如果元素为null,将返回null
    removeLast()删除最后一个元素,并返回删除元素的值,如果为null,将抛出异常
    pollLast()删除最后一个元素,并返回删除元素的值,如果为null,将返回null
    removeFirstOccurrence(Object o) 删除第一次出现的指定元素
    removeLastOccurrence(Object o) 删除最后一次出现的指定元素

3.获取元素

  • getFirst() 获取第一个元素,如果没有将抛出异常
    getLast() 获取最后一个元素,如果没有将抛出异常

4.队列操作

  • add(E e) 在队列尾部添加一个元素
    offer(E e) 在队列尾部添加一个元素,并返回是否成功
    remove() 删除队列中第一个元素,并返回该元素的值,如果元素为null,将抛出异常(其实底层调用的是removeFirst())
    poll() 删除队列中第一个元素,并返回该元素的值,如果元素为null,将返回null(其实调用的是pollFirst())
    pollFirst() 检索并删除此deque的第一个元素,如果此deque为空,则返回 null 。
    pollLast() 检索并删除此deque的最后一个元素,如果此deque为空,则返回 null 。
    element() 获取第一个元素,如果没有将抛出异常
    peek() 获取第一个元素,如果返回null
    peekFirst()检索但不删除此deque的第一个元素,如果此deque为空,则返回 null
    peekLast()检索但不删除此deque的最后一个元素,如果此deque为空,则返回 null
    5.栈操作
  • push(E e) 栈顶添加一个元素
    pop(E e) 移除栈顶元素,如果栈顶没有元素将抛出异常

6.其他

  • size() 获取队列中元素个数
    isEmpty() 判断队列是否为空
    iterator() 迭代器,从前向后迭代
    descendingIterator() 迭代器,从后向前迭代
    contain(Object o) 判断队列中是否存在该元素
    toArray() 转成数组
    clear() 清空队列
    clone() 克隆(复制)一个新的队列

三.实例

ArrayDeque集合既可当队列使用,也可当栈使用,见实例如下:

1. ArrayDeque集合当栈来使用

import java.util.*;  public class ArrayDequeStack
{  public static void main(String[] args)  {  ArrayDeque stack = new ArrayDeque();  // 依次将三个元素push入"栈"  stack.push("循循渐进Linux");  stack.push("小学语文");  stack.push("时间简史");  // 输出:[时间简史, 小学语文, 循循渐进Linux]  System.out.println(stack);  // 访问第一个元素,但并不将其pop出"栈",输出:时间简史  System.out.println(stack.peek());  // 依然输出:[时间简史, 小学语文, 循循渐进Linux]  System.out.println(stack);  // pop出第一个元素,输出:时间简史  System.out.println(stack.pop());  // 输出:[小学语文, 循循渐进Linux]  System.out.println(stack);  }
}

2. ArrayDeque集合当队列来使用

import java.util.*;  public class ArrayDequeQueue
{  public static void main(String[] args)  {  ArrayDeque queue = new ArrayDeque();  // 依次将三个元素加入队列  queue.offer("光头强");  queue.offer("熊大");  queue.offer("熊二");  // 输出:[光头强, 熊大, 熊二]  System.out.println(queue);  // 访问队列头部的元素,但并不将其poll出队列"栈",输出:光头强  System.out.println(queue.peek());  // 依然输出:[光头强, 熊大, 熊二]  System.out.println(queue);  // poll出第一个元素,输出:光头强  System.out.println(queue.poll());  // 输出:[熊大, 熊二]  System.out.println(queue);  }
}

参考:
https://www.iteye.com/blog/cakin24-2324030
https://www.cnblogs.com/chenglc/p/10722304.html

ArrayDeque类的使用相关推荐

  1. 集合框架之ArrayDeque类详解

    Java集合框架分析(Deque)---ArrayDeque类详解 目录 一.数据结构 二.类标题 三.字段 四.构造函数 五.方法分析 类型 方法 作用 添加元素 public void addFi ...

  2. java addfirst_java – ArrayDeque类的addFirst方法

    以下行的功能基本上是(head-1)MODULO(elements.length),因此当head == 0时,从head减去1将导致最大可能值而不是-1. head = (head - 1) &am ...

  3. Java.util包中常用的类

    Java.util包 Java.util.ArrayDeque类 Java.util.ArrayList类 Java.util.Arrays类 Java.util.BitSet类 Java.util. ...

  4. java 方法 示例_Java ArrayDeque pollFirst()方法与示例

    java 方法 示例 ArrayDeque类pollFirst()方法 (ArrayDeque Class pollFirst() method) pollFirst() Method is avai ...

  5. java 方法 示例_Java ArrayDeque offerFirst()方法与示例

    java 方法 示例 ArrayDeque类offerFirst()方法 (ArrayDeque Class offerFirst() method) offerFirst() Method is a ...

  6. sheets.add示例_Java ArrayDeque add()方法与示例

    sheets.add示例 ArrayDeque类add()方法 (ArrayDeque Class add() method) add() Method is available in java.la ...

  7. java peek方法_Java ArrayDeque peek()方法与示例

    java peek方法 ArrayDeque类peek()方法 (ArrayDeque Class peek() method) peek() Method is available in java. ...

  8. element 项目 示例_Java ArrayDeque element()方法与示例

    element 项目 示例 ArrayDeque类element()方法 (ArrayDeque Class element() method) element() Method is availab ...

  9. java isempty_Java ArrayDeque isEmpty()方法与示例

    java isempty ArrayDeque类isEmpty()方法 (ArrayDeque Class isEmpty() method) isEmpty() Method is availabl ...

最新文章

  1. 升讯威微信营销系统开发实践:(3)功能介绍与此项目推广过程的一些体会( 完整开源于 Github)...
  2. 【CSS3 DEMO】扑克正反面翻牌效果
  3. 解决element-ui table 表格排列错位问题
  4. vue的v-html使用
  5. php PHP-FPM进程数的设定
  6. Dropping water balloons
  7. 采用C语言写文本文件实例
  8. 报告,开启新副本!经典赛强势回归
  9. Quartus II 15详细安装教程
  10. clover更新驱动 后不能开机_MAC 10.14 安装教程-CLOVER的简单操作说明
  11. ASP.NET大作业/ASP.NET期末项目/大作业
  12. python实现获取ip、网站备案信息、whois查询
  13. 朴素贝叶斯分类器(离散型)算法实现(一)
  14. 实验四实验四实验四啊!
  15. python猴子吃桃问题_用Python解决猴子吃桃问题
  16. Java 一元、二元运算符、三目条件运算符(三元运算符)
  17. git 的批量克隆 批量切换分支 批量pull
  18. C语言中的#if语句使用
  19. Python3学习3 格式化 % format
  20. 怎样通过百度文库引流?使得你的网络业绩倍增

热门文章

  1. 爬虫代码成功运行完没有结果
  2. mysql注释单行,数据库单行注释
  3. 苹果春季发布会提前曝光:紫色iPhone 13 Pro冲上热搜,SE3将搭载A15芯片
  4. HTML和CSS学习
  5. 20200220财务分析
  6. 乔春洋:品牌文化的功能
  7. js获取span到浏览器窗口顶部的距离,包括被lineHeight撑开的部分在内
  8. Schtasks 命令详解
  9. MegaCli 使用
  10. 万邦淘宝代购系统;海外代购系统;代购程序,代购系统源码PHP前端源码