Java中Deque和ArrayDeque
Deque类
一个线性的可在双端插入、删除节点的结构。他名字时Deque,实际上时“double ended queue”的简写;
ArrayDeque类
对于ArrayDeque中的数组,它是一个逻辑上的循环数组,所谓循环是指元素到数组尾之后可以接着从数组头开始,数组的长度、第一个和最后一个元素都与head和tail这两个变量有关
构造方法
ArrayDeque就像他的名字一样,使用Array数组来实现Deque结构。构造方法和以前提到的ArrayList相似。
1 | public ArrayDeque() { |
添加和移除方法
- add方法
1 | // 在前面添加元素,也就是在数组的第一个位置上加元素 |
有了这两种方法,队列或者栈的方法都可以轻松实现了。
在进行增加元素的时候涉及到 doubleCapacity
这个方法,这个方法主要用来扩充数组的容量。
1 | private void doubleCapacity() { |
- remove方法
1 | public E remove() { |
- toArray方法
toArray方法主要是方便输出。用来真正的按照逻辑顺序,进行物理重排,实现方法和doubleCapacity实现相同。
1 | public Object[] toArray() { |
- size方法
和很多数据结构类不同的是,他的size并不是依靠本身的变量字段进行维护,而是通过size方法计算而来。
1 | public int size() { |
总结一下,ArrayDeque实现了双端队列的特点,能够完成栈和队列的功能,效率比同样继承Deque的LinkedList效率高,因为在ArrayDeque中的计算大部分为位运算。ArrayDeque逻辑上循环的数组,但实际上并不是。