Java 数据结构之Deque(双端队列)

Deque是Java中的双端队列接口,它继承Queue并支持在队列两端进行插入和删除操作。Deque提供了多种方法,如insert、remove和examine,可以作为FIFO队列或LIFO栈使用。接口不支持下标访问,不推荐插入null元素,且其实现通常不定义基于元素的equals和hashCode方法。
摘要由CSDN通过智能技术生成

Deque接口是“double ended queue”的缩写(通常读作“deck”),即双端队列,支持在队列的两端插入和删除元素,继承Queue接口。大多数的实现对元素的数量没有限制,但这个接口既支持有容量限制的deque,也支持没有固定大小限制的。

Deque接口定义了在两端访问元素的方法,主要包括insert、remove和examine。和Queue定义一样,所有这些方法存在两种形式:一种如果操作失败则抛出异常,另一种则返回一个特殊值(null或false)。后者主要是为有容量限制的队列实现的。

Deque的12种方法总结如下:

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

当deque用作queue时,则表现出FIFO的行为,元素从队尾加入,在队首移除,从Queue接口继承来的方法和Deque中的一些方法等同。如下表:

Comparison of Queue and Deque methods
{@code Queue} Method Equivalent {@code Deque} Method
{@link java.util.Queue#add add(e)} {@link #addLast addLast(e)}
{@link java.util.Queue#offer offer(e)} {@link #offerLast offerLast(e)}
{@link java.util.Queue#remove remove()} {@link #removeFirst removeFirst()}
{@link java.util.Queue#poll poll()} {@link #pollFirst pollFirst()}
{@link java.util.Queue#element element()} {@link #getFirst getFirst()}
{@link java.util.Queue#peek peek()} {@link #peek peekFirst()}

Deque也可以被用作LIFO的栈,此时的接口应该严格参照Stack类的实现。当deque被用作栈时,元素在deque的head端push/pop。栈的方法等价于Deque中的一些方法,如下表:

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

注意:peek方法在Deque用作队列和栈时是没问题的,这两种情况都是在deque的head端获得。

Deque接口提供了两种方法来移除内部的元素,removeFirstOccurrence 和 removeLastOccurrence。

Deque与List不同,该接口不支持下标访问元素。Deque的实现并不严格要求禁止插入元素null,但强烈鼓励不插入null。任何Deque的实现都强烈鼓励不要插入null,因为null是多种方法作为一种特殊返回值来表示deque为空。

和Queue一样,Deque的实现通常不定义基于元素的equals和hashCode方法,而是直接继承自Object类。

Deque接口源码:

public interface Deque<E> extends Queue<E> {
    /**
     * Inserts the specified element at the front of this deque if it is
     * possible to do so immediately without violating capacity restrictions,
     * throwing an {@code IllegalStateException} if no space is currently
     * available.  Wh
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值