java集合系列10 Deque

前言

Deque 双端队列 继承了 Queue
这里写图片描述

Deque

文档介绍

一个线性collection,支持在两端插入和删除。deque 是 “double ended queue”的缩写。绝大多数的Deque实现对它们能包含的元素数没有固定的限制,但此接口支持容量限制,也支持没有固定大小限制的双端队列。

此接口定义了访问队列两端元素的方法。提供了插入,移除,检查元素的方法。这些的每个方法存在两种形式:如果失败一种抛出一个异常,一种返回一个特殊值(null 或 false, 依赖于具体的操作)。后一种形式的插入操作用于具有容量限制的特殊双端队列;在大多数实现中,插入操作不会失败。

上面介绍的十二个方法的概括
有意义的方法名 offer(提供) poll(剪短) peek(偷窃)

-头部头部尾部尾部
-抛出异常特殊值抛出异常特殊值
插入addFirst(e)offerFirst(e)addLast(e)offerLast(e)
移除removeFirst()pollFirst()removeLast()pollLast()
检查getFirst()peekFirst()getLast()peekLast()

此接口扩展了Queue接口。在将双端队列用于队列时,将得到FIFO(先进先出)行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。从Queue接口继承的方法完全等效于Deque方法,展示在下表

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

双端队列也可用于后进先出堆栈。就优先使用此接口而不是遗留Stack类,当一个双端队列被用作堆栈时。Stack与Deque完全等价的方法在下面的表格展示

Stack 方法等价的Deque方法
push(e)addFirst(e)
pop()removeFirst()
peek()peekFirst()

注意,在将双端队列用作队列或堆栈时,peek方法同样正常工作;无论哪种情况下,都从双端队列的开头抽取元素
此接口提供了两种移除内部元素的方法:removeFirstOccurrence 和 removeLastOccurrence

与List接口不同,此接口不支持通过索引访问元素。

虽然Deque实现没有严格要求禁止插入null元素,但强烈建议最好这样做。建议使用任何允许null元素的实现的双端队列的用户不利用插入null的功能。这因为当双端队列为空时好多方法将null作为特殊的返回值

Deque 实现通常不定义基于元素的 equals 和 hashCode 方法,而是从 Object 类继承基于身份的 equals 和 hashCode 方法。

源码

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);

    //队列的方法
    boolean add(E e);
    boolean offer(E e);
    E remove();
    E poll();
    E element();
    E peek();

    //堆栈的方法
    void push(E e);
    E pop();

    //集合的方法
    boolean remove(Object o);
    boolean contains(Object o);
    public int size();

    Iterator<E> iterator();
    Iterator<E> descendingIterator();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值