Android开发Android开发经验谈Android面试基础

深入理解Java集合之---Deque

2018-05-26  本文已影响17人  我是吸血鬼

Deque

interface Deque <E>

子接口:

BlockingDeque <E>

实现类:

Deque

线性集合,支持两端的元素插入和移除。Deque是double ended queue的简称,习惯上称之为双端队列。大多数Deque 实现对它们可能包含的元素的数量没有固定的限制,但是该接口支持容量限制的deques以及没有固定大小限制的deque。

在大多数实现中,插入操作不会失败。

发音为deck,千万因为发音问题出丑哦。

Deque同时扩展了Queue接口,当Deque作为队列的时候,会产生FIFO(先进先出)行为。元素添加在双端队列的末尾并从头开始删除。

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

同时,Deque也可以作为LIFO(后进先出)堆栈,此接口优于传统的Stack类使用。

Stack和Deque方法的比较

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

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

这个接口提供了两种方法去除内部元素,removeFirstOccurrence和removeLastOccurrence。

removeFirstOccurrence(Object o) removeLastOccurrence(Object o)
从此双端队列中移除指定元素的第一个匹配项。 从此双端队列中移除指定元素的最后一次出现。

虽然 Deque 实现没有严格要求禁止插入 null 元素,但建议最好这样做。建议任何事实上允许 null 元素的 Deque 实现用户最好不 要利用插入 null 的功能。这是因为各种方法会将null 用作特殊的返回值来指示双端队列为空。

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

Deque的使用场景
在一般情况,不涉及到并发的情况下,有两个实现类,可根据其自身的特性进行选择,分别是:

注意:LinkedList 和 ArrayDeque 是线程不安全的容器。

上一篇 下一篇

猜你喜欢

热点阅读