【Java队列】Queue,Deque及其子类使用方法解析

Queue介绍

队列,先进先出。

Queue接口与List、Set同一级别,都是继承了Collection接口。
在这里插入图片描述

Queue使用

常用方法解释
offer(e)添加元素,成功为true,失败为false
poll ()返回队列头,出队列,队列空为null
peek()返回队列头,不出队列,队列空为null

Deque介绍

双端队列,可在两头入队和出队
在这里插入图片描述

Deque使用

当成单端队列使用

常用方法解释
offerLast(e)队列头添加元素,成功为true,失败为false
pollFirst ()返回队列头,出队列,队列空为null
peekFirst()返回队列头,不出队列,队列空为null

当成双端队列使用

常用方法解释
offerFirst(e)队列头添加元素,成功为true,失败为false
pollFirst ()返回队列头,出队列,队列空为null
peekFirst()返回队列头,不出队列,队列空为null
offerLast(e)队列尾添加元素,成功为true,失败为false
pollLast()返回队列尾,出队列,队列空为null
peekLast()返回队列尾,不出队列,队列空为null

当成栈使用

方法解释
push(e)入栈,失败则抛出 illegalStateException
peek()返回栈顶值,失败抛出NoSuchElementException
pop()出栈,返回栈顶值,失败抛出NoSuchElementException

ArrayDeque的介绍

Deque接口的可调整大小的数组实现

  • 没有容量限制,按需增长
  • 非线程安全
  • 禁止null值
  • 当成栈使用时,比Stack类快
  • 当成单边队列使用时,比LinkedList快

底层是一个object数组,初始容量为8。head和tail属性控制队列头和队列尾。

transient Object[] elements; // non-private to simplify nested class access
   /**
     * The index of the element at the head of the deque (which is the
     * element that would be removed by remove() or pop()); or an
     * arbitrary number equal to tail if the deque is empty.
     */
    transient int head;

    /**
     * The index at which the next element would be added to the tail
     * of the deque (via addLast(E), add(E), or push(E)).
     */
    transient int tail;

    /**
     * The minimum capacity that we'll use for a newly created deque.
     * Must be a power of 2.
     */
    private static final int MIN_INITIAL_CAPACITY = 8;

在这里插入图片描述

ArrayDeque的使用

调用Deque接口中的方法即可

LinkedList的介绍

实现了List和Deque接口的双端链表实现类。接受null值。线程非安全。

在这里插入图片描述

核心结构是内部类Node

  private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

LinkedList的使用

调用deque或者List中的接口方法即可使用。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java中的队列queue)和双端队列deque)都是常用的数据结构,用于存储一系列元素并进行操作。它们在不同的场景下有不同的用途。 当我们需要在队列尾部插入元素,并从队列头部取出元素时,使用队列queue)是最好的选择。队列queue)遵循先进先出(FIFO)的原则,保证插入的元素排在最后,而取出元素时从队列头部开始。在该场景下对于Java Queue接口的实现类LinkedList即可满足需求。 而在需要在队列头部和尾部同时插入删除元素时,我们可以选择双端队列deque)。双端队列deque)支持在队列头部和尾部两端插入和删除元素,并且可以使用队列和栈两种方式进行操作。JavaDeque接口即为双端队列的接口,常见实现有ArrayDeque和LinkedList。ArrayDeque由于是基于循环数组的实现,因此相比LinkedList在插入删除操作时更加高效。 因此,根据具体的需求和场景选择合适的队列或双端队列实现即可。如果只需要普通的队列功能,则使用Queue或LinkedList即可;需要更多的操作则可使用Deque或ArrayDeque。 ### 回答2: Java中的队列是一种用于存储元素的数据结构,其中存储的元素可以按照先进先出(FIFO)的顺序进行排列。Queue接口是Java集合框架中的一个接口,用于表示队列,可以实现队列的操作,如添加元素、删除元素、检索元素等。 Queue接口继承了Collection接口,该接口提供了添加元素、删除元素、以及检索队列中的元素的方法Java中的Queue接口有两个主要的实现类,即LinkedList和PriorityQueue。LinkedList实现了Queue接口,是Java中最常见的队列类,而PriorityQueue实现了Queue和Comparable接口,可以用于创建优先队列。 另一个Java中的队列实现类是Deque(Double Ended Queue)接口。与Queue接口不同的是,Deque接口允许在队列的两端添加或删除元素,因此它支持FIFO和LIFO(后进先出)两种模式。 总之,当我们需要实现一个简单的队列时,可以考虑使用Queue接口,如果需要队列可以在两端添加或删除元素,则可以使用Deque接口。但具体使用哪个接口,还需要根据具体情况具体分析。 ### 回答3: Java队列可以使用QueueDeque两种数据结构来表示,选择使用哪种数据结构主要根据具体的业务需求和设计目的而定。 Queue是一种“先进先出”(FIFO)的队列结构,它表示一组元素的集合,其中新元素被添加到队列的尾部,而元素被提取时从队列的头部开始。Queue接口包括了add,offer,remove,poll,peek方法Deque是一种“双向队列”,它实现了Queue接口并提供了高效的插入和删除操作。Deque允许在队列的两端添加或删除元素,可以被用作栈和队列双重行的结构。Deque接口包括了addFirst,addLast,offerFirst,offerLast,removeFirst,removeLast,pollFirst,pollLast,peekFirst,peekLast等方法。 如果只需要实现简单的先进先出队列的功能,使用Queue就足够了,而如果需要在队列两端进行高效的插入和删除操作,建议使用Deque。 总之,根据具体的业务需求和设计目的来选择使用Queue还是Deque

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值