Wrayの知识库 Wrayの知识库
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • MacOS
  • Linux
  • Windows
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • MacOS
  • Linux
  • Windows
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
  • Java基础

    • Java概述
    • Java语法
    • 面向对象编程
    • Java数组
    • String字符串
    • 异常处理
  • Java集合

    • Java集合概述
    • ArrayList
    • LinkedList
    • HashMap
    • LinkedHashMap
    • HashSet
    • TreeMap
    • Queue&Deque
      • 1. Queue 接口方法
      • 2. Deque 接口方法
      • 3. Queue 与 Deque 的区别
      • 4. Queue 与 Deque 的经典实现类
      • 5. 总结
  • Java并发

    • Java并发概述
    • 线程与进程
    • Thread类与线程生命周期
    • 线程安全
    • synchronized关键字
    • volatile关键字
    • Java内存模型(JMM)
    • 线程间通信
    • 线程池
    • 并发工具类
    • 原子操作类Atomic
    • 并发锁
    • 并发容器
    • ConcurrentHashMap
    • BlockingQueue
    • CopyOnWriteArrayList
    • ThreadLocal
    • Fork/Join框架
    • ScheduledThreadPoolExecutor
    • CompletableFuture
  • Java IO

    • Java IO概述
  • JVM

    • JVM概述
  • Java
  • Java集合
Wray
2024-10-31
目录

Queue&Deque

Queue 和 Deque 是 Java 集合框架中的两个重要接口,用于处理元素的有序存储和访问。Queue 代表一个先进先出的数据结构,而 Deque 是双端队列,支持从两端进行元素操作。下面我们对它们的接口方法、区别以及经典实现类进行分析。

# 1. Queue 接口方法

Queue 接口主要用于定义先进先出的队列操作,常用的接口方法包括:

  • add(E e):将元素添加到队列的尾部,如果队列已满则抛出异常。
  • offer(E e):将元素添加到队列的尾部,如果队列已满则返回 false,该方法与 add() 类似,但更为灵活。
  • remove():移除并返回队列头部的元素,如果队列为空则抛出异常。
  • poll():移除并返回队列头部的元素,如果队列为空则返回 null。
  • element():返回队列头部的元素,但不移除它,如果队列为空则抛出异常。
  • peek():返回队列头部的元素,但不移除它,如果队列为空则返回 null。

Queue 接口的这些方法定义了队列操作的标准,提供了元素的添加、移除、查看等功能,并且在队列为空或满的情况下提供了不同的错误处理方式。

# 2. Deque 接口方法

Deque(双端队列)接口扩展了 Queue,允许在队列的两端插入和删除元素。常用的接口方法包括:

  • addFirst(E e):将元素添加到队列的头部,如果队列已满则抛出异常。
  • addLast(E e):将元素添加到队列的尾部,如果队列已满则抛出异常。
  • offerFirst(E e):将元素添加到队列的头部,如果队列已满则返回 false。
  • offerLast(E e):将元素添加到队列的尾部,如果队列已满则返回 false。
  • removeFirst():移除并返回队列头部的元素,如果队列为空则抛出异常。
  • removeLast():移除并返回队列尾部的元素,如果队列为空则抛出异常。
  • pollFirst():移除并返回队列头部的元素,如果队列为空则返回 null。
  • pollLast():移除并返回队列尾部的元素,如果队列为空则返回 null。
  • getFirst():返回队列头部的元素,但不移除它,如果队列为空则抛出异常。
  • getLast():返回队列尾部的元素,但不移除它,如果队列为空则抛出异常。
  • peekFirst():返回队列头部的元素,但不移除它,如果队列为空则返回 null。
  • peekLast():返回队列尾部的元素,但不移除它,如果队列为空则返回 null。
  • push(E e):将元素推入到栈的顶部(相当于 addFirst())。
  • pop():移除并返回栈顶的元素(相当于 removeFirst())。

Deque 提供了在两端操作元素的灵活性,既可以用作队列(FIFO),也可以用作栈(LIFO)。

# 3. Queue 与 Deque 的区别

  • 操作范围:

    • Queue 只允许在队列的尾部插入元素,在头部移除元素,遵循 FIFO(先进先出)原则。
    • Deque 允许在队列的两端插入和移除元素,既可以作为队列,也可以作为栈使用。
  • 方法扩展:

    • Queue 的方法比较单一,只支持单向的插入和移除操作。
    • Deque 在 Queue 的基础上增加了双端操作的方法,提供了更多的灵活性。
  • 使用场景:

    • Queue 适用于需要按照顺序处理元素的场景,例如任务调度、消息队列等。
    • Deque 则适用于需要灵活操作两端元素的场景,例如实现双端队列、栈等数据结构。

# 4. Queue 与 Deque 的经典实现类

  • Queue 的经典实现类:

    • LinkedList:LinkedList 实现了 Queue 接口,支持在链表的尾部添加元素和在头部移除元素。
    • PriorityQueue:PriorityQueue 是一种基于堆的优先级队列,元素按照优先级顺序出队,而不是插入顺序。
  • Deque 的经典实现类:

    • LinkedList:LinkedList 也实现了 Deque 接口,支持双向操作,可以在两端进行元素的插入和移除。
    • ArrayDeque:ArrayDeque 是一个基于数组的双端队列,提供比 LinkedList 更高效的实现,尤其在栈和队列操作方面表现出色。

# 5. 总结

Queue 和 Deque 都是 Java 中用于存储和管理有序元素的接口,但它们的应用场景和操作灵活性有所不同。Queue 主要用于先进先出的场景,而 Deque 提供了更多操作的灵活性,可以同时作为队列和栈使用。经典实现类如 LinkedList 和 ArrayDeque 为它们的使用提供了不同的选择,开发者可以根据具体需求选择合适的实现类。

上次更新: 2024/10/31, 18:28:18
TreeMap
Java并发概述

← TreeMap Java并发概述→

Copyright © 2023-2024 Wray | 鄂ICP备2024050235号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式