标签:something get aci pre nal 数据 inf boolean table
public boolean add(T o) {
queue[tail] = o;
int newtail = (tail + 1) % capacity;
if (newtail == head)
throw new IndexOutOfBoundsException("Queue full");
tail = newtail;
return true; // we did add something
}
// 构建一个指定初始容量的ArrayQueue,数据为空
public ArrayQueue(int capacity) {
// 容量,resize
this.capacity = capacity + 1;
// 存储数据
this.queue = newArray(capacity + 1);
// 头部元素
this.head = 0;
// 尾部元素
this.tail = 0;
}
// 获取队列的大小
public int size() {
// Can‘t use % here because it‘s not mod: -3 % 2 is -1, not +1.
int diff = tail - head;
if (diff < 0)
diff += capacity;
return diff;
}
// 获取指定位置的元素
public T get(int i) {
int size = size();
if (i < 0 || i >= size) {
final String msg = "Index " + i + ", queue size " + size;
throw new IndexOutOfBoundsException(msg);
}
//head
int index = (head + i) % capacity;
return queue[index];
}
X 代表未填充元素,E代表填充元素,h代表头部元素位置;t代表尾部元素位置
位置 | 位置 | 位置 | 位置 | 位置 |
---|---|---|---|---|
X | X | X | X | X |
h | ||||
t |
位置 | 位置 | 位置 | 位置 | 位置 |
---|---|---|---|---|
E | E | E | E | X |
h | ||||
t |
位置 | 位置 | 位置 | 位置 | 位置 |
---|---|---|---|---|
X | X | E | E | X |
h | ||||
t |
位置 | 位置 | 位置 | 位置 | 位置 |
---|---|---|---|---|
X | X | E | E | E |
h | ||||
t |
位置 | 位置 | 位置 | 位置 | 位置 |
---|---|---|---|---|
E | X | E | E | E |
h | ||||
t |
位置 | 位置 | 位置 | 位置 | 位置 |
---|---|---|---|---|
E | X | X | X | X |
h | ||||
t |
欢迎关注我的公众号:
阅读com.sun.jmx.remote.internal.ArrayQueue源码Note
标签:something get aci pre nal 数据 inf boolean table
原文地址:https://www.cnblogs.com/zzzzzzzh/p/12776051.html