ArrayDeque和LinkedList对比
ArrayDeque
和 LinkedList
是 Java 集合框架中的两个重要类,分别代表了数组双端队列和链表。它们都实现了 Deque
接口,但内部结构和工作机制有很大差异。
ArrayDeque
ArrayDeque
是基于循环数组实现的双端队列。它使用两个指针 head
和 tail
来追踪队列的头部和尾部,使得在队列两端的添加和移除操作都能高效地进行。
以下是 ArrayDeque
的一个简化的内部结构和关键方法:
public class ArrayDeque<E> extends AbstractCollection<E> implements Deque<E>, Cloneable, Serializable {
transient Object[] elements; // 队列元素存储在这个数组中
transient int head; // 指向队列头部元素的指针
transient int tail; // 指向下一个元素将被添加到尾部的位置的指针
public ArrayDeque() {
elements = new Object[16];
}
// 添加元素到队尾
public void addLast(E e) {
elements[tail] = e;
if ( (tail = (tail + 1) & (elements.length - 1)) == head)
doubleCapacity(