ArrayDeque

Deque接口

什么是Deque?队列不是Queue么?
我们通过Deque源码得知,Deque是继承自Queue接口
ArrayDeque
翻译一下:支持两端元素插入和移除的线性集合。 名称deque是“双端队列”的缩写,通常发音为“deck”。 大多数Deque实现对它们可能包含的元素的数量没有固定的限制,但是该接口支持容量限制的deques以及没有固定大小限制的deques。
大家也可以通过查询工具去查询具体方法的实现
Java8API查询工具

也就是说Deque接口底层实现结构是双端队列(利用数组实现)
(tips:当我们要使用队列数据结构时,Java8更推荐使用ArrayDeque,其次选择LinkedList来实现)

ArrayDeque

ArrayDeque描述:
ArrayDeque
可调整大小的数组的实现的Deque接口。 数组deques没有容量限制; 他们根据需要增长以支持使用。 它们不是线程安全的; 在没有外部同步的情况下,它们不支持多线程的并发访问。 null 元素被禁止。 当用作堆栈时,此类可能会比Stack快,并且当用作队列时速度高于LinkedList 。
构造器
ArrayDeque
无参构造器ArrayDeque() 默认初始化数组的个数为16。
有参构造器两个很简单,一个指定初始化大小,一个将一个集合放入ArrayDeque集合


ArrayDeque
add 和 offer 的区别 offer方法调用对应的add方法,并且add方法如果添加失败(添加元素为null)会抛出异常
offer失败会抛出异常。


ArrayDeque
remove 和 poll 的区别,poll删除对应位置的于元素后,返回删除的元素,remove调用对应的poll,并且如果此元素不存在,会抛出异常。
poll 删除失败返回null
remove 删除失败抛出异常


ArrayDeque
get和peek都是获取对应位置的元素,get失败会抛出异常,peek不会。

扩容
ArrayDeque
在addLast()方法中,我们可以看出扩容调用的是doubleCapacity()
ArrayDeque
可以看出ArrayDeque 的扩容方式是二倍扩容

扩容过程
ArrayDeque
并且我们可以看出ArrayDeque集合也可以不仅可以当作队列去使用,还可以当作栈去使用,ArrayDeque有对应的方法,push(),pop(),peek()。
队列