您的位置:首页 > 产品设计 > UI/UE

java.util.Deque学习笔记

2016-11-07 17:09 381 查看

概述

Deque(Double ended queue)是一种线性集合,其允许在集合两端进行数据的插入和删除操作。大多数的Deque实现没有确定的可保存元素数目,但是在本接口中,仍然提供了对容量限制型的队列的支持。本接口中提供了可以双向访问队列中元素的方法,与基本队列Queue类似,其提供的方法在执行失败时均存在两种处理形式:抛出异常或者返回一个特殊值(一般为null或者false)。其中第二中形式的插入操作是为有容量限制的Deque实现设计,而一般情况下,插入操作不会出现失败的情况。

其具体方法的处理逻辑如下所示:

-头部访问尾部访问
操作抛出异常返回特殊值抛出异常返回特殊值
插入操作
addFirst(e)
offerFirst(e)
addLast(e)
offerLast(e)
删除操作
removeFirst()
p
4000
ollFirst()
removeLast()
pollLast()
访问操作
getFirst()
peekFirst()
getLast()
peekLast()
Deque接口继承自Queue接口。当一个deque被用作queue时,并且采用FIFO原则访问时,所有的元素被添加到队列的尾端,并从头部开始访问。从Queue中继承来的接口与Deque接口中方法的等价操作如下:

Queue MethodEquivalent Deque Method
add(e)
addLast(e)
offer(e)
offerLast(e)
remove()
removeFirst()
poll()
pollFirst()
element()
getFirst()
peek()
peekFirst()
Deque也可以用做栈(Stack),且一般情况下,建议使用Deque来模拟栈的操作。当Deque以栈的形式存在时,元素的插入的弹出操作均在队列的头部进行。栈中的方法与Deque方法的等价关系如下表:

Stack MethodEquivalent Deque Method
add(e)
addFirst(e)
pop()
removeFirst()
peek()
peekFirst()
这个接口中还提供了两个删除队列内部元素的方法:removeFirstOccurrence和removeLastOccurrence。与java.util.List接口不同,这个接口并不提供根据索引访问元素的方法(随机访问)。虽然Deque接口中并不强制要求不能插入null元素,但是在实现本接口时,强烈建议实现类似机制。并且对于Deque接口的使用者来说,也不建议使用可以插入null元素的特性来完成某些操作。因为null被用作某些方法的特殊返回值来表示队列为空。与Queue接口类似,Deque接口仍然没有重写equals和hashCode方法。

方法介绍

void addFirst(E e);


将元素插入到队列的头部。当队列没有可用容量时,则抛出IllegalStateException异常。在实用过程中,建议使用
offerFirst
方法。

void addLast(E e);


将元素插入到队列的尾部,与
add
方法等价。当队列没有可用容量时,则抛出IllegalStateException异常。在实用过程中,建议使用
offerLast
方法。

boolean offerFirst(E e)


将元素插入队列的头部。其与
addFirst(e)
的区别仅有一点,即:当队列中没有可用容量时候,
addFirst
将抛出
IllegalStateException
异常,而
offerFirst
则是返回false。

boolean offerLast(E e);


将元素插入到队列的尾部。其与
addLast(e)
的区别仅有一点,即:当队列中没有可用容量时候,
addLast
将抛出
IllegalStateException
异常,而
offerLast
则是返回false。

E removeFirst();


删除队列头部元素,并将其返回。当队列为空时,则抛出
NoSuchElementException
异常.

E removeLast();


删除队列尾部元素,并将其返回。当队列为空时,抛出
NoSuchElementException
异常.

E pollFirst();


删除队列头部元素,并将其返回。当队列为空时,返回null。

E pollLast();


删除队列尾部元素,并将其返回。当队列为空时,返回null。

E getFirst();


返回列表头部的元素,当列表为空时,抛出
NoSuchElementException
异常。

E getLast();


返回列表尾部的元素,当列表为空时,抛出
NoSuchElementException
异常。

E peekFirst();


返回列表头部的元素,当列表为空时,返回null。

E peekLast();


返回列表尾部的元素,当列表为空时,返回null。

boolean removeFirstOccurrence(Object o);


从队列中删除第一个与
o
相等的元素。当队列中不包含本元素时,则维持不变。即:删除第一个满足条件
(o==null ? e==null : o.equals(e))
的元素。当队列中包含本元素时,返回true,否则返回false。

boolean removeLastOccurrence(Object o);


从队列中删除最后一个与
o
相等的元素。当队列中不包含本元素时,则维持不变。即:删除最后一个满足条件
(o==null ? e==null : o.equals(e))
的元素。当队列中包含本元素时,返回true,否则返回false。

void push(E e);


将元素
e
插入到由双向队列描述的栈中,即:将元素插入到列表的头部。当列表中没有空余容量时,则抛出
IllegalStateException
方法。这个方法与双向队列的
addFirst(e)
等价。

E pop();


从由双向队列描述的栈中弹出一个元素,即:返回双向队列中的头部元素,并将其从队列中删除。当队列中没有元素时,抛出
NoSuchElementException
异常,与
removeFirst()
等价。

boolean remove(Object o);


删除队列中第一个与
o
相等的元素。如果当前队列不包含此元素时,则队列保持不变。即:删除队列中第一个满足
(o==null ? e==null : o.equals(e))
的元素。如果队列包含此元素,则返回true,否则返回false。此方法与
removeFirstOccurrence
相同。

boolean contains(Object o);


当队列中包含元素
o
时,返回true,否则返回false。即:队列中至少又一个元素满足条件
(o==null ? e==null : o.equals(e))
时,则返回true,否则返回false。

public int size();


返回队列中元素的个数。

Iterator<E> iterator();


返回基于队列元素的迭代器。迭代器将从头至尾遍历队列中的元素。

Iterator<E> descendingIterator();


返回基于列表元素的逆向迭代器。即:由队列尾到队列头返回队列中的元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: