読者です 読者をやめる 読者になる 読者になる

言いたいことはそれだけか

JavaとかAndroidとか調べたことをメモします。٩( 'ω' )و

先日他人が書いていた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が持っている優先度は無視されてしまうという仕組みでした。