Module  java.base
软件包  java.util

Interface Deque<E>

  • 参数类型
    E - 在这个deque中保存的元素的类型
    All Superinterfaces:
    Collection<E>Iterable<E>Queue<E>
    All Known Subinterfaces:
    BlockingDeque<E>
    所有已知实现类:
    ArrayDequeConcurrentLinkedDequeLinkedBlockingDequeLinkedList


    public interface Deque<E>
    extends Queue<E>
    支持两端元素插入和移除的线性集合。 名称deque是“双端队列”的缩写,通常发音为“deck”。 大多数Deque实现对它们可能包含的元素数量没有固定的限制,但是该接口支持容量限制的deques以及没有固定大小限制的deques。

    该界面定义了访问deque两端元素的方法。 提供了插入,移除和检查元素的方法。 这些方法中的每一种都有两种形式:如果操作失败,则抛出异常,另一种方法返回一个特殊值(根据操作而定)( nullfalse )。 插入操作的后一种形式专门设计用于容量限制的Deque实现; 在大多数实现中,插入操作不能失败。

    上述十二种方法总结在下表中:

    Summary of Deque methods First Element (Head) Last Element (Tail) Throws exception Special value Throws exception Special value Insert addFirst(e) offerFirst(e) addLast(e) offerLast(e) Remove removeFirst() pollFirst() removeLast() pollLast() Examine getFirst() peekFirst() getLast() peekLast()

    此界面扩展了Queue界面。 当使用deque作为队列时,FIFO(先进先出)行为的结果。 元素将添加到deque的末尾,并从头开始删除。 Queue接口继承的方法正好等同于Deque方法,如下表所示:

    Comparison of Queue and Deque methods Queue Method Equivalent Deque Method add(e) addLast(e) offer(e) offerLast(e) remove() removeFirst() poll() pollFirst() element() getFirst() peek() peekFirst()

    Deques也可以用作LIFO(先进先出)堆栈。 这个接口应该优先于传统的Stack类。 当一个deque作为一个堆栈时,元素从deque的开头被推出并弹出。 堆栈方法正好等同于Deque方法,如下表所示:

    Comparison of Stack and Deque methods Stack Method Equivalent Deque Method push(e) addFirst(e) pop() removeFirst() peek() peekFirst()

    请注意,当使用deque作为队列或堆栈时, peek方法同样适用; 在任何一种情况下,元素都是从德甲开始绘制的。

    此接口提供两种方法来清除内部元素, removeFirstOccurrenceremoveLastOccurrence

    List接口不同,此接口不支持索引对元素的访问。

    尽管不严格要求Deque实现来禁止插入空元素,但是强烈建议这样做。 任何用户Deque强烈建议实现,也允许null元素采取插入空的能力优势。 这是因为null被用作特殊的返回值通过各种方法来表示deque是空的。

    Deque实现通常不定义基于元素的版本的equalshashCode方法,而是继承从类别Object的基于身份的版本。

    此接口是Java Collections Framework的成员。

    从以下版本开始:
    1.6
    • 方法摘要

      所有方法  接口方法  抽象方法 
      Modifier and Type 方法 描述
      boolean add​(E e)
      将指定的元素插入由此deque表示的队列(换句话说,在该deque的尾部),如果可以立即执行此操作,而不会违反容量限制, true在成功后返回 true ,如果当前没有可用空间,则抛出 IllegalStateException
      boolean addAll​(Collection<? extends E> c)
      在指定集合的末尾添加指定集合中的所有元素,如同通过按照集合的迭代器返回的顺序调用每个 元素addLast(E)一样
      void addFirst​(E e)
      如果可以立即在没有违反容量限制的情况下将指定的元素插入到此deque的前面,如果当前没有可用空间,则抛出一个 IllegalStateException
      void addLast​(E e)
      如果可以立即在不违反容量限制的情况下将指定的元素插入到此deque的末尾,则抛出一个 IllegalStateException如果当前没有可用空间)。
      boolean contains​(Object o)
      如果此deque包含指定的元素,则返回 true
      Iterator<E> descendingIterator​()
      以相反的顺序返回此deque中的元素的迭代器。
      E element​()
      检索但不删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。
      E getFirst​()
      检索,但不删除,这个deque的第一个元素。
      E getLast​()
      检索,但不删除,这个deque的最后一个元素。
      Iterator<E> iterator​()
      以正确的顺序返回此deque中的元素的迭代器。
      boolean offer​(E e)
      将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回 true在成功和 false ,如果当前没有空间可用。
      boolean offerFirst​(E e)
      在此deque的前面插入指定的元素,除非它会违反容量限制。
      boolean offerLast​(E e)
      在此deque的末尾插入指定的元素,除非它会违反容量限制。
      E peek​()
      检索但不删除由此deque表示的队列的头部(换句话说,该deque的第一个元素),如果此deque为空,则返回 null
      E peekFirst​()
      检索但不删除此deque的第一个元素,如果此deque为空,则返回 null
      E peekLast​()
      检索但不删除此deque的最后一个元素,如果此deque为空,则返回 null
      E poll​()
      检索并删除由此deque表示的队列的头部(换句话说,该deque的第一个元素),如果此deque为空,则返回 null
      E pollFirst​()
      检索并删除此deque的第一个元素,如果此deque为空,则返回 null
      E pollLast​()
      检索并删除此deque的最后一个元素,如果此deque为空,则返回 null
      E pop​()
      从这个deque表示的堆栈中弹出一个元素。
      void push​(E e)
      将元素推送到由此deque表示的堆栈(换句话说,在此deque的头部),如果可以立即执行此操作,而不会违反容量限制,如果当前没有可用空间,则抛出一个 IllegalStateException
      E remove​()
      检索并删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。
      boolean remove​(Object o)
      从此deque中删除指定元素的第一个出现。
      E removeFirst​()
      检索并删除此deque的第一个元素。
      boolean removeFirstOccurrence​(Object o)
      从此deque中删除指定元素的第一个出现。
      E removeLast​()
      检索并删除此deque的最后一个元素。
      boolean removeLastOccurrence​(Object o)
      从此deque中删除指定元素的最后一次出现。
      int size​()
      返回此deque中的元素数。
    • 方法详细信息

      • addFirst

        void addFirst​(E e)
        如果可以在不违反容量限制的情况下立即将其指定的元素插入到此deque的前面,如果当前没有可用的空间,则抛出一个IllegalStateException 当使用容量限制的deque时,通常优选使用方法offerFirst(E)
        参数
        e - 要添加的元素
        异常
        IllegalStateException - 如果由于容量限制,此时无法添加该元素
        ClassCastException - 如果指定元素的类阻止将其添加到此deque
        NullPointerException - 如果指定的元素为空,此deque不允许空元素
        IllegalArgumentException - 如果指定元素的某些属性阻止将其添加到此deque
      • addLast

        void addLast​(E e)
        如果可以立即在不违反容量限制的情况下将指定的元素插入到此deque的末尾,如果当前没有可用的空间,则抛出一个IllegalStateException 当使用容量限制的deque时,通常优选使用方法offerLast(E)

        此方法相当于add(E)

        参数
        e - 要添加的元素
        异常
        IllegalStateException - 如果由于容量限制,此时无法添加该元素
        ClassCastException - 如果指定元素的类阻止将其添加到此deque
        NullPointerException - 如果指定的元素为空,并且此deque不允许空元素
        IllegalArgumentException - 如果指定元素的某些属性阻止将其添加到此deque
      • offerFirst

        boolean offerFirst​(E e)
        在此deque的前面插入指定的元素,除非它会违反容量限制。 当使用容量限制的deque时,该方法通常比addFirst(E)方法更为方便 ,只能通过抛出异常来插入元素。
        参数
        e - 要添加的元素
        结果
        true如果元素添加到此deque,否则为 false
        异常
        ClassCastException - 如果指定元素的类阻止将其添加到此deque
        NullPointerException - 如果指定的元素为空,并且此deque不允许空元素
        IllegalArgumentException - 如果指定元素的某些属性阻止将其添加到此deque
      • offerLast

        boolean offerLast​(E e)
        在此deque的末尾插入指定的元素,除非它会违反容量限制。 当使用容量限制的deque时,这种方法通常比addLast(E)方法更为方便 ,只能通过抛出异常来插入元素。
        参数
        e - 要添加的元素
        结果
        true如果元素被添加到此deque,否则为 false
        异常
        ClassCastException - 如果指定元素的类阻止将其添加到此deque
        NullPointerException - 如果指定的元素为空,并且该deque不允许空元素
        IllegalArgumentException - 如果指定元素的某些属性阻止将其添加到此deque
      • removeFirst

        E removeFirst​()
        检索并删除此deque的第一个元素。 此方法与pollFirst的区别仅在于,如果此deque为空,那么它将抛出异常。
        结果
        这个德克的头
        异常
        NoSuchElementException - 如果这个deque是空的
      • removeLast

        E removeLast​()
        检索并删除此deque的最后一个元素。 此方法与pollLast不同之处在于,如果此deque为空,它将抛出异常。
        结果
        这个德克的尾巴
        异常
        NoSuchElementException - 如果这个deque是空的
      • pollFirst

        E pollFirst​()
        检索并删除此deque的第一个元素,如果此deque为空,则返回 null
        结果
        这个deque的头,或 null如果这个deque是空的
      • pollLast

        E pollLast​()
        检索并删除此deque的最后一个元素,如果此deque为空,则返回 null
        结果
        这个deque的尾巴,或 null如果这个deque是空的
      • getFirst

        E getFirst​()
        检索,但不删除,这个deque的第一个元素。 此方法与peekFirst不同之处在于,如果此deque为空,它将抛出异常。
        结果
        这个德克的头
        异常
        NoSuchElementException - 如果这个deque是空的
      • getLast

        E getLast​()
        检索,但不删除,这个deque的最后一个元素。 此方法与peekLast不同之处在于,如果此deque为空,它将抛出异常。
        结果
        这个德克的尾巴
        异常
        NoSuchElementException - 如果这个deque是空的
      • peekFirst

        E peekFirst​()
        检索但不删除此deque的第一个元素,如果此deque为空,则返回 null
        结果
        这个deque的头,或 null如果这个deque是空的
      • peekLast

        E peekLast​()
        检索但不删除此deque的最后一个元素,如果此deque为空,则返回 null
        结果
        这个deque的尾巴,或 null如果这个deque是空的
      • removeFirstOccurrence

        boolean removeFirstOccurrence​(Object o)
        从此deque中删除指定元素的第一个出现。 如果deque不包含元素,则它不变。 更正式地,删除第一元素e使得Objects.equals(o, e) (如果这样的元素存在)。 如果此deque包含指定的元素(或等效地,如果此deque由于调用而更改),则返回true
        参数
        o - 要从此deque中删除的元素(如果存在)
        结果
        true如果一个元素被删除作为此调用的结果
        异常
        ClassCastException - 如果指定元素的类与此deque不兼容( optional
        NullPointerException - 如果指定的元素为空,并且该deque不允许空元素( optional
      • removeLastOccurrence

        boolean removeLastOccurrence​(Object o)
        从此deque中删除指定元素的最后一次出现。 如果deque不包含元素,则它不变。 更正式地,删除最后一个元素e ,使得Objects.equals(o, e) (如果这样的元素存在)。 如果此deque包含指定的元素(或等效地,如果此deque由于调用而更改),则返回true
        参数
        o - 要从此deque中删除的元素(如果存在)
        结果
        true如果一个元素被删除作为这个调用的结果
        异常
        ClassCastException - 如果指定元素的类与此deque不兼容( optional
        NullPointerException - 如果指定的元素为空,此deque不允许空元素( optional
      • add

        boolean add​(E e)
        将指定的元素插入由此deque表示的队列(换句话说,在该deque的尾部),如果可以立即执行,而不违反容量限制, true在成功后返回true ,如果当前没有可用空间,则抛出IllegalStateException 当使用容量限制的deque时,通常最好使用offer

        此方法相当于addLast(E)

        Specified by:
        add在接口 Collection<E>
        Specified by:
        add在接口 Queue<E>
        参数
        e - 要添加的元素
        结果
        true (由 Collection.add(E)指定)
        异常
        IllegalStateException - 如果由于容量限制,此时无法添加该元素
        ClassCastException - 如果指定元素的类阻止将其添加到此deque
        NullPointerException - 如果指定的元素为空,并且该deque不允许空元素
        IllegalArgumentException - 如果指定元素的某些属性阻止将其添加到此deque
      • offer

        boolean offer​(E e)
        将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回true在成功和false ,如果当前没有空间可用。 当使用容量限制的deque时,这种方法通常比add(E)方法更为方便 ,只能通过抛出异常来插入元素。

        此方法相当于offerLast(E)

        Specified by:
        offer在接口 Queue<E>
        参数
        e - 要添加的元素
        结果
        true如果元素被添加到此deque,否则为 false
        异常
        ClassCastException - 如果指定元素的类阻止将其添加到此deque
        NullPointerException - 如果指定的元素为空,并且此deque不允许空元素
        IllegalArgumentException - 如果指定元素的某些属性阻止其添加到此deque
      • remove

        E remove​()
        检索并删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。 该方法与poll()不同之处在于,如果此deque为空,它将抛出异常。

        此方法相当于removeFirst()

        Specified by:
        remove在接口 Queue<E>
        结果
        由这个德克队代表的队列的头
        异常
        NoSuchElementException - 如果这个deque是空的
      • poll

        E poll​()
        检索并删除由此deque(换句话说,此deque的第一个元素)表示的队列的头部,或者如果此deque为空,则返回null

        此方法相当于pollFirst()

        Specified by:
        poll在接口 Queue<E>
        结果
        这个deque的第一个元素,或 null如果这个deque是空的
      • element

        E element​()
        检索但不删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。 此方法与peek的区别仅在于如果此deque为空,那么它将抛出异常。

        此方法相当于getFirst()

        Specified by:
        element在接口 Queue<E>
        结果
        由这个德克队代表的队列的头
        异常
        NoSuchElementException - 如果这个deque是空的
      • peek

        E peek​()
        检索但不删除由此deque表示的队列的头部(换句话说,此deque的第一个元素),如果此deque为空,则返回null

        此方法相当于peekFirst()

        Specified by:
        peek在接口 Queue<E>
        结果
        由这个deque表示的队列的头,或者如果这个deque是空的,则是 null
      • addAll

        boolean addAll​(Collection<? extends E> c)
        在指定的集合的末尾添加指定集合中的所有元素,就像通过按照集合的迭代器返回的顺序调用每个元素addLast(E)一样

        当使用容量限制的deque时,通常最好在每个元素上单独调用offer

        尝试添加元素时遇到的异常可能会导致在抛出关联的异常时成功添加了一些元素。

        Specified by:
        addAll在接口 Collection<E>
        参数
        c - 要插入此deque的元素
        结果
        true如果这个deque由于调用而改变了
        异常
        IllegalStateException - 如果不是所有的元素可以在此时由于插入限制添加
        ClassCastException - 如果指定集合的元素的类阻止将其添加到此deque
        NullPointerException - 如果指定的集合包含一个空元素,并且该deque不允许空元素,或者如果指定的集合为空
        IllegalArgumentException - 如果指定集合的元素的某些属性阻止将其添加到此deque
        另请参见:
        Collection.add(Object)
      • push

        void push​(E e)
        将元素推送到由此deque表示的堆栈(换句话说,在此deque的头部),如果可以立即执行此操作而不违反容量限制,则抛出IllegalStateException如果当前没有可用空间)。

        此方法相当于addFirst(E)

        参数
        e - 要推的元素
        异常
        IllegalStateException - 如果由于容量限制,此时无法添加该元素
        ClassCastException - 如果指定元素的类阻止将其添加到此deque
        NullPointerException - 如果指定的元素为空,并且此deque不允许空元素
        IllegalArgumentException - 如果指定元素的某些属性阻止将其添加到此deque
      • pop

        E pop​()
        从这个deque表示的堆栈中弹出一个元素。 换句话说,删除并返回此deque的第一个元素。

        此方法相当于removeFirst()

        结果
        这个deque前面的元素(它是由这个deque表示的堆栈的顶部)
        异常
        NoSuchElementException - 如果这个deque是空的
      • remove

        boolean remove​(Object o)
        从此deque中删除指定元素的第一个出现。 如果deque不包含元素,则它不变。 更正式地,删除第一元素e ,使得Objects.equals(o, e) (如果这样的元素存在)。 如果此deque包含指定的元素(或等效地,如果此deque由于调用而更改),则返回true

        此方法相当于removeFirstOccurrence(Object)

        Specified by:
        remove在接口 Collection<E>
        参数
        o - 要从此deque移除的元素(如果存在)
        结果
        true如果某个元素因此调用而被删除
        异常
        ClassCastException - 如果指定元素的类与此deque不兼容( optional
        NullPointerException - 如果指定的元素为空,此deque不允许空元素( optional
      • contains

        boolean contains​(Object o)
        如果此deque包含指定的元素,则返回true 更正式地,返回true如果且仅当此deque包含至少一个元素e ,使得Objects.equals(o, e)
        Specified by:
        contains在接口 Collection<E>
        参数
        o - 要在此deque中存在的元素要进行测试
        结果
        true如果此deque包含指定的元素
        异常
        ClassCastException - 如果指定元素的类与此deque不兼容( optional
        NullPointerException - 如果指定的元素为空,并且此deque不允许空元素( optional
      • size

        int size​()
        返回此deque中的元素数。
        Specified by:
        size在接口 Collection<E>
        结果
        这个deque中的元素数量
      • iterator

        Iterator<E> iterator​()
        以正确的顺序返回此deque中的元素的迭代器。 元素将按照从头(头)到最后(尾)的顺序返回。
        Specified by:
        iterator在接口 Collection<E>
        Specified by:
        iterator在接口 Iterable<E>
        结果
        在这个deque中的元素以适当的顺序迭代
      • descendingIterator

        Iterator<E> descendingIterator​()
        以相反的顺序返回此deque中的元素的迭代器。 元素将从最后(尾)到第一(头)的顺序返回。
        结果
        an iterator over the elements in this deque in reverse sequence