Java???????????????PriorityQueue
???????????? ???????[ 2016/6/6 14:04:00 ] ??????????????????? Java
???????????
?????????Java ArrayDeque?????????Stack??Queue???????????????????н???PriorityQueue??????????С???????е????????????????????????????????С???Java?????????????С????C++???????????????????????????浽???С?????????С?????п???????????????????natural ordering????????????????????????????Comparator????????C++??o???????
????Java??PriorityQueue?????Queue?????????????null????????????????????????????????????complete binary tree??????С????????????????????????????????????????????????????ζ?????????????????PriorityQueue????????
???????????????????????????????????????????????????????????????????????????????????е???????????????????1????
????leftNo = parentNo*2+1
????rightNo = parentNo*2+2
????parentNo = (nodeNo-1)/2
????????????????????????????????????????????????????±?????????????????????????洢??????
????PriorityQueue??peek()??element????????????add()?? offer()?? ???????remove()???poll()????????臨??????log(N)??
????????????
????add()??offer()
????add(E e)??offer(E e)?????????????????????????в??????????Queue???漲?????????????????????????????????????????????????false??????PriorityQueue???????????????????
????????????????????С???????????????????б?????????
//offer(E e)
public boolean offer(E e) {
if (e == null)//?????????null???
throw new NullPointerException();
modCount++;
int i = size;
if (i >= queue.length)
grow(i + 1);//???????
size = i + 1;
if (i == 0)//??????????????????????????
queue[0] = e;
else
siftUp(i?? e);//????
return true;
}
?????????????У????????grow()??????ArrayList???grow()?????????????????????????飬????????????????????????????????????????siftUp(int k?? E x)???????÷?????????????x????????????
//siftUp()
private void siftUp(int k?? E x) {
while (k > 0) {
int parent = (k - 1) >>> 1;//parentNo = (nodeNo-1)/2
Object e = queue[parent];
if (comparator.compare(x?? (E) e) >= 0)//???????????????
break;
queue[k] = e;
k = parent;
}
queue[k] = x;
}
?????????????x????????С???????????????????е???????????????????k?????λ????????x?????????parent???б????????????????x >= queue[parent]??????????????????????????????????????????????????
????element()??peek()
????element()??peek()?????????????????????????????????????????????С??????????????????????????????????????????????null??????С????????????????????????С???????????????????????????±?????0?±????????????????????????????????0?±???????????ɡ?
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11