???????????????
????//peek()
????public E peek() {
????if (size == 0)
????return null;
????return (E) queue[0];//0?卤???????????小?????
????}
????remove()??poll()
????remove()??poll()??????????????????????????????????????????????????????????????????????null???????????????????械????????小????????????????斜?????????

???????????锟�?
public E poll() {
if (size == 0)
return null;
int s = --size;
modCount++;
E result = (E) queue[0];//0?卤???????????小?????
E x = (E) queue[s];
queue[s] = null;
if (s != 0)
siftDown(0?? x);//????
return result;
}
??????????????????0?卤??????????煤????????婊�0?卤?位?????????????siftDown()?????????械????????????0?卤?????????????小????????????????siftDown(int k?? E x)???????梅????????????k?????位????????x?????????????????????薪?小??????????????x小??????????????械??魏????????
//siftDown()
private void siftDown(int k?? E x) {
int half = size >>> 1;
while (k < half) {
//???????????????薪?小????????????c??????child??????卤?
int child = (k << 1) + 1;//leftNo = parentNo*2+1
Object c = queue[child];
int right = child + 1;
if (right < size &&
comparator.compare((E) c?? (E) queue[right]) > 0)
c = queue[child = right];
if (comparator.compare(x?? (E) c) <= 0)
break;
queue[k] = c;//?????c?????????
k = child;
}
queue[k] = x;
}
????remove(Object o)
????remove(Object o)????????????????懈?o????????????????卸??????????????????梅???????Queue???????????????Collection??????????????????????????薪???????????械??????????????????位??????????????????????????????????????????????????remove(Object o)??????2???????1. ?????????????????????????????????????2. ????????????????????????????????????????????siftDown()???伞?????????????

??????????????锟�?
//remove(Object o)
public boolean remove(Object o) {
//??????????????????????????o.equals(queue[i])?????卤?
int i = indexOf(o);
if (i == -1)
return false;
int s = --size;
if (s == i) //???1
queue[i] = null;
else {
E moved = (E) queue[s];
queue[s] = null;
siftDown(i?? moved);//???2
......
}
return true;
}