Queue接口
queue接口特点:可以模拟队列行为,即“先进先出”。
接口结构
queue接口继承了Collection接口,并增加了一些新方法
1 | public interface Queue<E> extends Collection<E>{ |
抽象类AbstractQueue
queue接口中,add与offer、remove与poll、element与peek,功能一致,只是对异常情况的处理不同。AbstractQueue源码中可以看出这些方法处理异常的方式。
1 | public abstract class AbstractQueue<E> |
Deque接口
Deque是双端队列,底层由循环数组实现,其继承了Queue接口,并扩展了新特性。
Deque重写了Queue的全部方法,Stack、Collection的部分方法,并增加了对首尾元素处理的相关方法。
1 | public interface Deque<E> extends Queue<E> { |
ArrayDeque
ArrayDeque不可以存取null元素,因为会根据某个位置是否为null来判断元素是否存在。
当作为栈使用时,性能比stack好,作为队列使用时,性能比linkedlist好
类定义
继承了AbstractCollection,实现了Deque接口
1 | public class ArrayDeque<E> extends AbstractCollection<E> |
重要的成员变量
1 | // 第一个元素的索引 |
构造方法
1 | //默认数组大小16 |
调整数组大小
1 | private void allocateElements(int numElements) { |
add
1 | public void addFirst(E e) { |
remove
1 | public E removeFirst() { |
删除指定元素
需要遍历数组,时间复杂度较高
1 | public boolean removeFirstOccurrence(Object o) { |
1 | private boolean delete(int i) { |
1 | private void checkInvariants() { |
扩容
1 | private void doubleCapacity() { |