publicint size() {
returnsize;
}
size方法返回size
publicvoid clear() {
modCount++;
for (inti = 0; i < size; i++)
queue[i] = null;
size = 0;
}
这个是清除所有元素的方法
修改次数自增
遍历数组 将每个元素置空
Size设为0
@SuppressWarnings("unchecked")
public E poll() {
if (size == 0)
returnnull;
ints = --size;
modCount++;
E result = (E) queue[0];
E x = (E) queue[s];
queue[s] = null;
if (s != 0)
siftDown(0, x);
returnresult;
}
这是将队列头部元素删除的方法
判断size为0 就返回空值
将size自减后赋给临时变量s 修改次数自增
获取数组第一个元素 赋给临时变量result
获取数组最有一个非空元素赋给临时变量x
将x对应的数组元素置空
判断s不为0 调用siftDown方法将数组调整其他元素
最后返回result
@SuppressWarnings("unchecked")
private E removeAt(inti) {
modCount++;
ints = --size;
if (s == i)
queue[i] = null;
else {
E moved = (E) queue[s];
queue[s] = null;
siftDown(i, moved);
if (queue[i] == moved) {
siftUp(i, moved);
if (queue[i] != moved)
returnmoved;
}
}
returnnull;
}
将指定下标处的元素删除的方法
修改次数自增
size自减值赋给临时变量s
判断如果s和参数下标相等 也就是要删除数组最后一个元素 就将最后一个元素置空
如果要删除的不是数组最后一个非空元素 就获取数组最后一个非空元素 并将数组最后一个非空元素置空 调用siftDown方法调整元素 调整后判断如果参数下标处的元素为刚才的最后一个非空元素 就调用siftUp方法继续调整 再判断调整后参数下标处的元素不是最初那个最后一个非空元素了 就返回刚才那个最后一个非空元素
跳出判断 返回空