第1部分 Deque接口介绍
Deque接口简介
Deque译为双端队列,在双向都能作为队列来使用,同时可用作栈。Deque接口的方法是对称成比例的。
Deque接口继承Queue接口,因此具有Queue,Collection,Iterable的方法属性。
Deque接口常用API
省略与Queue接口类似的方法
修饰语和返回类型 | 特殊方法 | 描述 |
---|---|---|
boolean | removeFirstOccurrence(Object o) | 移除第一个出现对象o的元素 |
boolean | removeLastOccurrence(Object o) | 移除最后一个出现对象o的元素 |
Iterator | descendingIterator() | 返回逆序迭代器 |
用作栈的方法 | ||
void | push(E e) | 压入元素到栈顶(也就是队头) |
E | pop() | 从栈顶移除并返回元素 |
第2部分 Deque接口数据结构
Deque接口的继承关系
java.lang.Object
↳ java.lang.Iterable<E>
↳ java.util.Collection<E>
↳ java.util.Queue<E>
↳
public interface Deque<E> extends Queue<E> {}
Deque接口的关系图
图1 Deque接口的关系图
第3部分 Deque接口源码解析(基于JDK-8u201)
public interface Deque<E> extends Queue<E> {
//移除第一个出现对象o的元素
boolean removeFirstOccurrence(Object o);
//移除最后一个出现对象o的元素
boolean removeLastOccurrence(Object o);
//返回逆序迭代器
Iterator<E> descendingIterator();
//用作栈
void push(E e);
E pop();
//跟Queue一样的增删和判断是否有元素的方法
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();
//继承Queue的方法
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
//继承Collection的方法
boolean remove(Object o);
boolean contains(Object o);
public int size();
//继承Iterable的方法
Iterator<E> iterator();
}
从源码中可以看出,使用了"面向继承"的思想后,发现新增的方法只有5个,而且比较简单。同时,可以看出,双端队列的方法都是“double”的,即对称成比例。这样划分后,就能很好记住这些方法了。给方法属性归类总结,也是分析源码一项比较好的习惯,这样能看最少的代码,记住最多的内容。
在官网中,给出了很多方法总结与对比,如下:
图2 双端队列作为队列的方法
图3 队列中对应双端队列的方法
图4 栈对应双端队列的方法