Java Deque 接口

Java集合框架中的Deque接口提供了双端队列的功能。它扩展了Queue接口。


Deque的工作原理

在常规队列中,元素从尾部添加,从头部移除。然而,在双端队列中,我们可以从头部和尾部插入和移除元素

Working of deque (double-ended queue) data structure

实现Deque的类

要使用Deque接口的功能,我们需要使用实现它的类。

ArrayDeque and Linkedlist implements Deque

如何使用Deque?

在Java中,我们必须导入java.util.Deque包才能使用Deque

// Array implementation of Deque
Deque<String> animal1 = new ArrayDeque<>();

// LinkedList implementation of Deque
Deque<String> animal2 = new LinkedList<>();

在这里,我们分别创建了ArrayDequeLinkedList类的对象animal1animal2。这些对象可以使用Deque接口的功能。


Deque的方法

由于Deque扩展了Queue接口,它继承了Queue接口的所有方法。

除了Queue接口中可用的方法外,Deque接口还包括以下方法:

  • addFirst() - 将指定元素添加到双端队列的开头。如果双端队列已满,则抛出异常
  • addLast() - 将指定元素添加到双端队列的末尾。如果双端队列已满,则抛出异常。
  • offerFirst() - 将指定元素添加到双端队列的开头。如果双端队列已满,则返回false
  • offerLast() - 将指定元素添加到双端队列的末尾。如果双端队列已满,则返回false
  • getFirst() - 返回双端队列的第一个元素。如果双端队列为空,则抛出异常。
  • getLast() - 返回双端队列的最后一个元素。如果双端队列为空,则抛出异常。
  • peekFirst() - 返回双端队列的第一个元素。如果双端队列为空,则返回null
  • peekLast() - 返回双端队列的最后一个元素。如果双端队列为空,则返回null
  • removeFirst() - 返回并移除双端队列的第一个元素。如果双端队列为空,则抛出异常。
  • removeLast() - 返回并移除双端队列的最后一个元素。如果双端队列为空,则抛出异常。
  • pollFirst() - 返回并移除双端队列的第一个元素。如果双端队列为空,则返回null
  • pollLast() - 返回并移除双端队列的最后一个元素。如果双端队列为空,则返回null

Deque作为栈数据结构

Java Collections框架Stack类提供了栈的实现。

然而,建议使用Deque作为栈,而不是Stack类。这是因为Stack的方法是同步的。

以下是Deque接口提供的实现栈的方法:

  • push() - 将元素添加到双端队列的开头。
  • pop() - 从双端队列的开头移除一个元素。
  • peek() - 从双端队列的开头返回一个元素。

ArrayDeque类中的Deque实现

import java.util.Deque;
import java.util.ArrayDeque;

class Main {

    public static void main(String[] args) {
        // Creating Deque using the ArrayDeque class
        Deque<Integer> numbers = new ArrayDeque<>();

        // add elements to the Deque
        numbers.offer(1);
        numbers.offerLast(2);
        numbers.offerFirst(3);
        System.out.println("Deque: " + numbers);

        // Access elements of the Deque
        int firstElement = numbers.peekFirst();
        System.out.println("First Element: " + firstElement);

        int lastElement = numbers.peekLast();
        System.out.println("Last Element: " + lastElement);

        // Remove elements from the Deque
        int removedNumber1 = numbers.pollFirst();
        System.out.println("Removed First Element: " + removedNumber1);

        int removedNumber2 = numbers.pollLast();
        System.out.println("Removed Last Element: " + removedNumber2);

        System.out.println("Updated Deque: " + numbers);
    }
}

输出

Deque: [3, 1, 2]
First Element: 3
Last Element: 2
Removed First Element: 3
Removed Last Element: 2
Updated Deque: [1]

要了解更多信息,请访问Java ArrayDeque

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战