???????????????
????//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;
}