Java数据结构和算法(二十四)-- Deque

Java数据结构和算法(二十四)-- Deque

 

 

1、简介

       支持在两端插入和移除元素的线性集合。 deque 这个名字是“Double-ended queues”的缩写。此接口定义访问双端元素的方法。提供了插入、删除和获取元素的方法。这些方法中的每一个都以两种形式存在:一种在操作失败时引发异常,另一种返回特殊值( null 或 false,具体取决于操作)。后一种形式的插入操作专门设计用于容量受限 Deque 的实现;在大多数实现中,插入操作不会失败。

public interface Deque<E> extends Queue<E>

 

2、Deque方法摘要
*                    第一个元素(头部)               最后一个元素(尾部)
* 操作 引发异常 返回特殊值 引发异常 特殊价值
* 插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
* 获取并删除 removeFirst() pollFirst() removeLast() pollLast()
* 获取 getFirst() peekFirst() getLast() peekLast()

 

3、此接口继承了Queue接口。当双端用作 FIFO(先进先出)行为队列时 Deque的部分方法与 Queue的等价:

* Queue 方法    等效 Deque 的方法
* add(e) addLast(e)
* offer(e) offerLast(e)
* remove() removeFirst()
* poll() pollFirst()
* element() getFirst()
* peek() peekFirst()

4、Deque 也可以用作LIFO(后进先出)堆栈。应优先使用此接口而不是旧 Stack 类。当双端面用作堆栈时,元素将从双端的开头推送和弹出。
* 堆栈方法与下表所示的方法完全相同 Deque:

* 堆栈方法   等效 Deque 方法
* push(e) addFirst(e)
* pop() removeFirst()
* peek() peekFirst()

5、Deque方法详解

public interface Deque<E> extends Queue<E> {

    /**
     * 如果可以在不违反容量限制的情况下立即插入指定的元素,则在此 deque 的前面插入指定的元素,如果当前没有可用空间,则抛出一个 IllegalStateException 。
     * 当使用容量受限的双端面时,通常最好使用方法 offerFirst。
     * 抛出:IllegalStateException – 如果由于容量限制而此时无法添加元素
     * @param e 要添加的元素
     */
    void addFirst(E e);

    /**
     * 如果可以在不违反容量限制的情况下立即插入指定的元素,则在此 deque 的末尾插入指定的元素,如果当前没有可用空间,则抛出 IllegalStateException 。
     * 当使用容量受限的双端面时,通常最好使用方法 offerLast。
     * 此方法等效于 add。
     * 抛出:IllegalStateException – 如果由于容量限制而此时无法添加元素
     * @param e 要添加的元素
     */
    void addLast(E e);

    /**
     * 将指定的元素插入到此双端的前面,除非它违反了容量限制。使用容量受限的双端式时,此方法通常比方法更 addFirst 可取,该方法只能通过引发异常来插入元素。
     * 返回:true 如果元素已添加到此双端,否则 false
     * @param e 要添加的元素
     */
    boolean offerFirst(E e);

    /**
     * 在此双端插入指定的元素,除非它违反了容量限制。使用容量受限的双端式时,此方法通常比方法更 addLast 可取,该方法只能通过引发异常来插入元素。
     * 返回:true 如果元素已添加到此双端,否则 false
     * @param e 要添加的元素
     */
    boolean offerLast(E e);

    /**
     * 检索并删除此双端面的第一个元素。此方法的不同 pollFirst 之处仅在于如果此 deque 为空,则会引发异常。
     * 抛出:NoSuchElementException – 如果此 deque 为空
     */
    E removeFirst();

    /**
     * 检索并删除此双端面的最后一个元素。此方法的不同 pollLast 之处仅在于如果此 deque 为空,则会引发异常。
     * 抛出:NoSuchElementException – 如果此
     */
    E removeLast();

    /**
     * 检索并删除此双端面的第一个元素,如果此双端面为空,则返回 null 。
     * 返回:此Deque的头部,或者 null 如果此双端为空
     */
    E pollFirst();

    /**
     * 检索并删除此双端面的最后一个元素,如果此双端面为空,则返回 null 。
     * 返回:此双端面的尾部,或者 null 如果此双端面为空
     */
    E pollLast();

    /**
     * 检索但不删除此双端面的第一个元素。此方法的不同 peekFirst 之处仅在于如果此 deque 为空,则会引发异常。
     * 返回:这个Deque的头
     * 抛出:NoSuchElementException – 如果此 deque 为空
     */
    E getFirst();

    /**
     * 检索但不删除此双端面的最后一个元素。此方法的不同 peekLast 之处仅在于如果此 deque 为空,则会引发异常。
     * 返回:这Deque的尾巴
     * 抛出:NoSuchElementException – 如果此 deque 为空
     */
    E getLast();

    /**
     * 检索但不删除此双端面格式的第一个元素,如果此双端面为空,则返回 null 。
     * 返回:此双克的头部,或者 null 如果此双端为空
     */
    E peekFirst();

    /**
     * 检索但不删除此双端面的最后一个元素,如果此双端面为空,则返回 null 。
     * 返回:此双端面的尾部,或者 null 如果此双端面为空
     */
    E peekLast();

    /**
     * 从此双端队列中删除指定元素的第一个匹配项。如果双端不包含元素,则保持不变。更正式地说,删除第一个元素 e ,
     * 使得 (o==null ? e==null : o.equals(e))( 如果存在这样的元素)。如果此双端面包含指定的元素(或者等效地,如果此双端面由于调用而更改),则返回 true 。
     * 参数:o – 要从此 deque 中删除的元素(如果存在)
     * 返回:true 如果由于此调用而删除了元素
     */
    boolean removeFirstOccurrence(Object o);

    /**
     * 从此双端面中删除指定元素的最后一次出现。如果双端不包含元素,则保持不变。更正式地说,删除最后一个元素 e ,使得 (o==null ? e==null : o.equals(e))
     * ( 如果存在这样的元素)。如果此双端面包含指定的元素(或者等效地,如果此双端面由于调用而更改),则返回 true 。
     * 参数:o – 要从此 deque 中删除的元素(如果存在)
     * 返回:true 如果由于此调用而删除了元素
     */
    boolean removeLastOccurrence(Object o);

}

 

posted @ 2023-04-28 13:48  邓维-java  阅读(996)  评论(0编辑  收藏  举报