京东云服务器推荐配置、多种配置选择,满足不同业务需求!

热门推荐

⭐ 稳定入门选择

配置:2核2G/5M

适用场景:个人站点 / 轻量应用

特点:性价比高,稳定可靠

¥19/月
立即购买
流量友好

☁️ 轻量云主机

配置:2核4G 5M

适用场景:小型业务 / 博客 / 测试环境

特点:流量友好,性能均衡

¥149/年
立即购买
高性能

💻 云服务主机

配置:4核16G 8M

适用场景:中小型服务 / 多并发场景

特点:充足内存与带宽,性能强劲

¥750/年
立即购买
新人专享

🎁 新人福利

新人访问 → 点击 → 最新活动

可获取 3000元 礼券

立即领取
Java教程 / Java 教程 / Java Queue(队列)
Java Deque 接口
Java 方法重载Java PriorityQueue

Java Deque 接口

在本教程中,我们将学习Deque接口,如何使用它及其方法。

Java集合框架的Deque接口提供了双端队列(Deque)的功能。它继承了Queue接口。

双端队列的工作原理

在常规队列中,元素是从后面添加的,而从前面删除的。但是,在双端队列中,我们可以从前后插入和删除元素

双端队列数据结构的工作

实现Deque的类

为了使用Deque接口的功能,我们需要使用实现接口的类:

  • ArrayDeque

  • LinkedList

ArrayDeque和Linkedlist实现Deque

如何使用Deque?

在Java中,我们必须导入要使用Deque的包 java.util.Deque 。

Deque<String> animal1 = new ArrayDeque<>();

Deque<String> animal2 = new LinkedList<>();

在这里,我们分别创建了类ArrayDeque和LinkedList的对象animal1和animal2。 这些对象可以使用Deque接口的功能。

双端队列的方法

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

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

  • addFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则引发异常。

  • addLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则引发异常。

  • offerFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则返回false。

  • offerLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则返回false。

  • getFirst() - 返回双端队列的第一个元素。如果双端队列为空,则引发异常。

  • getLast() - 返回双端队列的最后一个元素。如果双端队列为空,则引发异常。

  • peekFirst() - 返回双端队列的第一个元素。如果双端队列为空,则返回null。

  • peekLast() - 返回双端队列的最后一个元素。如果双端队列为空,则返回null。

  • removeFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则引发异常。

  • removeLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则引发异常。

  • pollFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则返回null。

  • pollLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则返回null。

双端队列作为堆栈数据结构

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) {
        // 使用ArrayDeque类创建Deque 
        Deque<Integer> numbers = new ArrayDeque<>();

        //添加元素到Deque
        numbers.offer(1);
        numbers.offerLast(2);
        numbers.offerFirst(3);
        System.out.println("Deque: " + numbers);

        //访问Deque的元素
        int firstElement = numbers.peekFirst();
        System.out.println("第一个元素: " + firstElement);

        int lastElement = numbers.peekLast();
        System.out.println("最后一个元素: " + lastElement);

        //从Deque 移除元素
        int removedNumber1 = numbers.pollFirst();
        System.out.println("移除第一个元素: " + removedNumber1);

        int removedNumber2 = numbers.pollLast();
        System.out.println("移除最后一个元素: " + removedNumber2);

        System.out.println("更新后的Deque: " + numbers);
    }
}

输出结果

Deque: [3, 1, 2]
第一个元素: 3
最后一个元素: 2
移除第一个元素: 3
移除最后一个元素: 2
更新后的Deque: [1]

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

Java 方法重载Java PriorityQueue