■
先日他人が書いていたcodeでPriorityQueueの使用方法がおかしかったので、ちょっと気になって調べてみました。
誤った使い方としてはこんな感じ。
for (Hoge hoge : mHogePriorityQueue) {
Priorityが高い順にfor文を回していることを期待するようなコードでしたが、
実際にはaddした順に要素がとれているようでした。
ではadd()がコールされた時に何が起こっているのか?
Cross Reference: /libcore/luni/src/main/java/java/util/PriorityQueue.java
PriorityQueueはelementsというメンバの配列を持っており、これはpriorityに応じた配列になっているようです。
一方、PriorityQueue自体を配列として扱おうとする場合、親クラスのtoArray()が適用されるためPriorityQueueが持っている優先度は無視されてしまうという仕組みでした。