美人如斯,文章如斯!

定义

双向队列:支持插入删除元素的线性集合

特性:

  1. 插入、删除、获取操作支持两种形式:快速失败和返回nulltrue/false
  2. 既具有FIFO特点又具有LIFO特点,即是队列又是栈
  3. 不推荐插入null元素,null作为特定返回值表示队列为空
  4. 未定义基于元素相等的equals和hashCode

UML类图

Deque继承关系

接口操作

接口分析

双向队列操作
插入元素
  • addFirst(): 向队头插入元素,如果元素为空,则发生NPE

  • addLast(): 向队尾插入元素,如果为空,则发生NPE

  • offerFirst(): 向队头插入元素,如果插入成功返回true,否则返回false

  • offerLast(): 向队尾插入元素,如果插入成功返回true,否则返回false

移除元素
  • removeFirst(): 返回并移除队头元素,如果该元素是null,则发生NoSuchElementException

  • removeLast(): 返回并移除队尾元素,如果该元素是null,则发生NoSuchElementException

  • pollFirst(): 返回并移除队头元素,如果队列无元素,则返回null

  • pollLast(): 返回并移除队尾元素,如果队列无元素,则返回null

获取元素
  • getFirst(): 获取队头元素但不移除,如果队列无元素,则发生NoSuchElementException

  • getLast(): 获取队尾元素但不移除,如果队列无元素,则发生NoSuchElementException

  • peekFirst(): 获取队头元素但不移除,如果队列无元素,则返回null

  • peekLast(): 获取队尾元素但不移除,如果队列无元素,则返回null

栈操作

pop(): 弹出栈中元素,也就是返回并移除队头元素,等价于removeFirst(),如果队列无元素,则发生NoSuchElementException

push(): 向栈中压入元素,也就是向队头增加元素,等价于addFirst(),如果元素为null,则发生NPE,如果栈空间受到限制,则发生IllegalStateException

应用场景

  1. 满足FIFO场景时
  2. 满足LIFO场景时,曾经在解析XML按标签时使用过栈这种数据结构,但是却选择Stack类,如果在进行栈选型时,更推荐使用Deque类,应为Stack是线程同步

主要实现

  • ArrayDeque: 基于数组实现的线性双向队列
  • LinkedList: 基于链表实现的链式双向队列

Java中Deque特性及API的更多相关文章

  1. Java 8新特性--Stream API

    Java 8 API添加了一个新的抽象称为流Stream,以一种声明的方式处理数据,可以极大提高程序员的生产力,写出高效.干净.简洁的代码.这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可 ...

  2. java中常见的字符串API

    java中定义了String类来封装字符串,并提供一系列的操作字符串的方法,他们都位于java.lang包下. package Main; public class String01 { public ...

  3. Java 中的时间日期 API

    自从 14 年发布 Java 8 以后,我们古老 java.util.Date 终于不再是我们 Java 里操作日期时间的唯一的选择. 其实 Java 里的日期时间的相关 API 一直为世猿诟病,不仅 ...

  4. java中FILE类常用API介绍

  5. Java 8 新特性-菜鸟教程 (8) -Java 8 日期时间 API

    Java 8 日期时间 API Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理. 在旧版的 Java 中,日期时间 API 存在诸多问题,其中有: ...

  6. Java 8 新特性-菜鸟教程 (0) -Java 8 新特性

    Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本. Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 ...

  7. Java-Runoob-高级课程:Java 8 新特性

    ylbtech-Java-Runoob-高级课程:Java 8 新特性 1.返回顶部 1. Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本. Or ...

  8. Java8 新特性 Stream() API

    新特性里面为什么要加入流Steam() 集合是Java中使用最多的API,几乎每一个Java程序都会制造和处理集合.集合对于很多程序都是必须的,但是如果一个集合进行,分组,排序,筛选,过滤...这些操 ...

  9. 【JAVA各版本特性】JAVA 1.0 - JAVA 12

    make JDK Version 1.01996-01-23 Oak(橡树) 初代版本,伟大的一个里程碑,但是是纯解释运行,使用外挂JIT,性能比较差,运行速度慢. JDK Version 1.119 ...

随机推荐

  1. 【React】Redux入门 & store体验

    组件间传值联动是令人头疼的问题,尤其是一个组件影响多个其他组件状态变化的时候,常常需要一级一级与父组件传值,与父组件的兄弟组件传值等等, 如何化繁为简地处理‘牵一发动全身’的清理就是将所有组件的sta ...

  2. vue父子组件的通信

    一.父组件向子组件传递数据 1.首先形成父子组件关系 <!DOCTYPE html> <html lang="en"> <head> <m ...

  3. Facebook发布全新JavaScript引擎:Hermes

    摘要: JS引擎开始升级了... 原文:技术栈中的爱马仕?Facebook发布全新JavaScript引擎:Hermes 作者:Carson_Ho Fundebug经授权转载,版权归原作者所有. 前言 ...

  4. java查看进程:jps命令

    java查看进程:jps命令 jps(Java Virtual Machine Process Status Tool) 是JDK .5提供的一个显示当前所有java进程pid的命令,简单实用,非常适 ...

  5. 算法学习day01 栈和队列

    1,设计一个算法利用顺序栈的基本运算判断一个字符串是否是回文 解题思路:      由于回文是从前到后和从后到前读都是一样的,所以只要将待判断的字符串颠倒 然后与原字符串相比较,就可以决定是否是回文了 ...

  6. fd (int)读写文件

    #include <string.h> #include <stdio.h> #include <fcntl.h> int main() { char *p1 = ...

  7. Sring StringBuffer StringBuilder封装类

    Sring StringBuffer StringBuilder封装类 一.String类常见方法的使用 字符串数据都是一个对象 字符串数据一旦初始化就不可以被改变 字符串对象都存储于常量池中,字符串 ...

  8. 2019 AI 100 Startups

  9. matlab的clc,close,close all,clear,clear all命令

    clc:清除命令窗口的内容,对工作环境中的全部变量无任何影响 close:关闭当前的Figure窗口 close all:关闭所有的Figure窗口 clear:清除工作空间的所有变量 clear a ...

  10. leetcode138. 复制带随机指针的链表

    思路一:哈希 借助哈希保存节点信息. 代码 时间复杂度:O(n)空间复杂度:O(n) class Solution{ public: Node* copyRandomList(Node* head) ...