本篇文章主要介绍了" ArrayDeque类源码解析",主要涉及到方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
ArrayDeque
1.数组实现双向队列
2.没有实现同步方法,线程不安全,效率较高
3.比LinkedList效率高
4.实现了栈,队列,作为栈使用...
ArrayDeque
1.数组实现双向队列
2.没有实现同步方法,线程不安全,效率较高
3.比LinkedList效率高
4.实现了栈,队列,作为栈使用时候效率比Stack高,作为队列时候比LinkedList效率高
通过数组实现双端队列,注意实现的还是循环队列
所在包
package java.util;
import java.io.*;
继承AbstractCollection
实现Deque、Cloneable、Serializable
publicclassArrayDeque<E> extendsAbstractCollection<E>
implementsDeque<E>, Cloneable, Serializable{// 内部代码下面讲解
}
四个变量
/**
* 数组作为存储结构
*/privatetransient E[] elements;
/**
* 头节点下标
*/privatetransientint head;
/**
* 尾节点下标
*/privatetransientint tail;
/**
* 创建队列最小容量,容量必须是2的x次方
*/privatestaticfinalint MIN_INITIAL_CAPACITY = 8;
分配空间
/**
* 分配空间
*
* @param numElements the number of elements to hold
*/privatevoidallocateElements(int numElements) {
int initialCapacity = MIN_INITIAL_CAPACITY;
// Find the best power of two to hold elements.// Tests "<=" because arrays aren't kept full.if (numElements >= initialCapacity) {
initialCapacity = numElements;
initialCapacity |= (initialCapacity >>> 1);
initialCapacity |= (initialCapacity >>> 2);
initialCapacity |= (initialCapacity >>> 4);
initialCapacity |= (initialCapacity >>> 8);
initialCapacity |= (initialCapacity >>> 16);
initialCapacity++;
if (initialCapacity < 0) // Too many elements, must back off
initialCapacity >>>= 1;// Good luck allocating 2 ^ 30 elements
}
elements = (E[]) new Object[initialCapacity];
}
满的时候,进行扩容,这里需要移动元素
/**
* head == tail 时候表示队列满了,需要扩充
* Double the capacity of this deque. Call only when full, i.e.,
* when head and tail have wrapped around to become equal.
*/privatevoiddoubleCapacity() {
assert head == tail;
int p = head;
int n = elements.length;
int r = n - p; // 元素个数int newCapacity = n << 1; // 新的空间,左移一位,新增加空间是原始空间的大小if (newCapacity < 0)
thrownew IllegalStateException("Sorry, deque too big");
Object[] a = new Object[newCapacity];
System.arraycopy(elements, p, a, 0, r); // 移动元素
System.arraycopy(elements, 0, a, r, p);
elements = (E[])a;
head = 0;
tail = n;
}
队列元素复制到数组