Java集合源码分析(十二)-Deque(下)

82 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

源码

package java.util;

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

    void addFirst(E e);
    
    void addLast(E e);
    
    boolean offerFirst(E e);
    
    boolean offerLast(E e);
    
    E removeFirst();

    E removeLast();

    E pollFirst();

    E pollLast();

    E getFirst();

    E getLast();

    E peekFirst();

    E peekLast();

    boolean removeFirstOccurrence(Object o);

    boolean removeLastOccurrence(Object o);

    // *** Queue methods ***

    boolean add(E e);

    boolean offer(E e);

    E remove();

    E poll();

    E element();

    E peek();


    // *** Stack methods ***

    void push(E e);

    E pop();


    // *** Collection methods ***

    boolean remove(Object o);

    boolean contains(Object o);

    public int size();

    Iterator<E> iterator();

    Iterator<E> descendingIterator();

}

方法总结

  • void addFirst(E e):如果在不违反容量限制的情况下立即插入指定元素在这个 deque 的前面,如果当前没有可用空间抛出 IllegalStateException。当使用容量受限的 deque,通常更适合使用 offerFirst 方法
  • void addLast(E e):如果在不违反容量限制的情况下立即插入指定元素在这个 deque 的尾部,如果当前没有可用空间抛出 IllegalStateException。当使用容量受限的 deque,通常更适合使用 offerLast 方法
  • boolean offerFirst(E e):在这个 deque 的前面插入指定元素,除非它违反容量限制。当使用容量限制的 deque,这个方法通常比 addFirst 方法更合适,addFirst 只有在抛出异常时插入元素失败
  • boolean offerLast(E e):在这个 deque 的尾部插入指定元素,除非它违反容量限制。当使用容量限制的 deque,这个方法通常比 addLast 方法更合适,addLast 只有在抛出异常时插入元素失败
  • E removeFirst():检索并且移除这个 deque 第一个元素,这个方法与 pollFirst 不同在于,当 deque 是空,它抛出异常
  • E removeLast():检索并且移除这个 deque 最后一个元素,这个方法与 pollLast 不同在于,当 deque 是空,它抛出异常
  • E pollFirst():检索并且移除这个 deque 第一个元素,或者返回 null 如果这个 deque 是空
  • E pollLast():检索并且移除这个 deque 最后一个元素,或者返回 null 如果这个 deque 是空
  • E getFirst():检索但不移除这个 deque 第一个元素,这个方法与 peekFirst 不同在于,当 deque 是空,它抛出异常
  • E getLast():检索但不移除这个 deque 最后一个元素,这个方法与 peekLast 不同在于,当 deque 是空,它抛出异常
  • E peekFirst():检索但不移除这个 deque 第一个元素,或者返回 null 如果这个 deque 是空
  • E peekLast():检索但不移除这个 deque 最后一个元素,或者返回 null 如果这个 deque 是空
  • boolean removeFirstOccurrence(Object o):移除指定元素在这个 deque 第一次出现,如果 deque 不包含这个元素,它不会改变。更准确地说,移除最后一个元素 e (o==null ? e==null : o.equals(e))(如果这样的元素存在)。如果这个 deque 包含指定元素(或等效,如果这个 deque 因为调用结果而改变)返回 true
  • boolean removeLastOccurrence(Object o):移除指定元素在这个 deque 最后一次出现,如果 deque 不包含这个元素,它不会改变。更准确地说,移除最后一个元素 e (o==null ? e==null : o.equals(e))(如果这样的元素存在)。如果这个 deque 包含指定元素(或等效,如果这个 deque 因为调用结果而改变)返回 true
  • boolean add(E e):如果在不违反容量限制的情况下立即插入指定元素到这个 queue 表示的队列(换句话说,在这个 deque 的尾部),成功返回 true,如果当前没有可用空间抛出 IllegalStateException,当使用容量受限的 deque,通常更合适使用 off * 这个方法等效于 addLast
  • boolean offer(E e):如果在不违反容量限制的情况下立即插入指定元素到这个 queue 表示的队列(换句话说,在这个 deque 的尾部),成功返回 true,如果当前没有可用空间返回 false。当使用容量受限的 deque,这个方法通常比 add 方法更合适,add 只有在抛出异常时插入元素失败
    • 这个方法等效于 offerLast
  • E remove():检索并且移除这个 deque 表示的队头(换句话说,这个 deque 的第一个元素),这个方法与 poll 不同在于,当 deque 是空,它抛出异常
    • 这个方法等效于 removeFirst()
  • E poll():检索并且移除这个 deque 表示的队头(换句话说,这个 deque 的第一个元素),或者返回 null 如果 deque 是空
    • 这个方法等效于 pollFirst()
  • E element():检索但不移除这个 deque 表示的队头(换句话说,这个 deque 的第一个元素),这个方法与 peek 不同在于,当 deque 是空,它抛出异常
    • 这个方法等效于 getFirst()
  • E peek():检索但不移除这个 deque 表示的队头(换句话说,这个 deque 的第一个元素),或者返回 null 如果 deque 是空
    • 这个方法等效于 peekFirst()
  • void push(E e):如果在不违反容量限制的情况下立即推送一个对象到这个 deque 表示的栈(换句话说,在这个 deque 的头),如果当前没有可用空间抛出 IllegalStateException
    • 这个方法等效于 addFirst
  • E pop():从这个 deque 表示的栈弹出一个对象,换句话说,移除并且返回这个 deque 的第一个元素
    • 这个方法等效于 removeFirst()
  • boolean remove(Object o):从这个 deque 移除指定元素第一次出现,如果 deque 不包含这个元素,它不会改变。更准确的说,移除第一个元素 e (o==null ? e==null : o.equals(e))(如果这样的元素存在)。如果这个 deque 包含指定元素(或等效,如果这个 deque 因为调用结果而改变)返回 true)
    • 这个方法等效于 removeFirstOccurrence(Object)
  • boolean contains(Object o):返回 true,如果这个 deque 包含指定元素,更准确的说,当且仅当这个 deque 包含至少一个元素 e (o==null ? e==null : o.equals(e)).,返回 true
  • public int size():返回这个 deque 的元素数量
  • Iterator<E> iterator():按照正确的顺序返回在这个 deque 的元素的迭代器。元素将按从第一个(头部)到最后一个(尾部)的顺序返回
  • Iterator<E> descendingIterator():按照相反的顺序返回在这个 deque 的元素的迭代器。元素将按从最后一个(尾部)到第一个(头部)顺序返回