类图结构
ArrayDeque是Deque接口的基于可变大小数组实现类。它的类层级结构如图所示:
类文件说明
ArrayDeque和ArrayList一样底层实现是动态数组,没有容量限制,可以动态扩容。ArrayDeque是非线程安全的。ArrayDeque不支持插入null元素。ArrayDeque可以提供Stack一样的操作,但是比Stack更快,因为Stack加了同步锁synchronized。
ArrayDeque的iterator是fail-fast模式的。当返回iterator后,任何不是通过iterator自己的修改函数对ArrayDeque的修改都会抛出异常ConcurrentModificationException。
ArrayDeque底层数据类型:
1 | // 数组 |
构造函数
ArrayDeque有三个构造函数如下:
1 | // 默认动态数组初始容量为16 |
addFirst
addFirst从双端队列的头部head添加元素
1 | public void addFirst(E e) { |
在添加元素途中仅当数组满了的时候(head == tail)才进行扩容:
1 | private void doubleCapacity() { |
扩容前后示意图如下:
扩容前:
扩容后:
addLast
addFirst从双端队列的尾部tail添加元素
1 | public void addLast(E e) { |
get
getFirst从双端队列头部获取元素,getLast从双端队列尾部获取元素
1 | public E getFirst() { |
remove
remove默认从头节点删除元素,然后将head指向下一个元素
1 | public E remove() { |
remove(Object o)指定的元素默认删除从head索引开始查找第一次出现的元素,如下可知删除指定元素,需要重新拷贝元素,是很耗性能的。
1 | public boolean remove(Object o) { |