優先キューの反復を含むJava割り当てがあります。キューは文字列とintを含むオブジェクトで構成されており、キュー内のすべてのオブジェクトに対して個別のオブジェクトの文字列をチェックする方法が必要です。
これをイテレータオブジェクトにするのが最善の方法でしょうか?それはあまりにも厄介なようです。デキューしてエンキューすることはできますが、それは非効率的なようです。たぶんforeachループ?
優先キューの反復を含むJava割り当てがあります。キューは文字列とintを含むオブジェクトで構成されており、キュー内のすべてのオブジェクトに対して個別のオブジェクトの文字列をチェックする方法が必要です。
これをイテレータオブジェクトにするのが最善の方法でしょうか?それはあまりにも厄介なようです。デキューしてエンキューすることはできますが、それは非効率的なようです。たぶんforeachループ?
はい、コレクション内のすべての要素をチェックする必要がある場合は、iterator
またはfor each
がおそらく最適です。
Iterator<E> iter = myPriorityQueue.iterator();
while (iter.hasNext()) {
current = iter.next();
// do something with current
}
または
for (Element e : myQueue) {
// do something with e
}
1つの小さな詳細:ループ中にキューが変更される可能性がある場合は、両方iterator
とfor each
が発生しConcurrentModificationException
ます。処理中にキューが変更される可能性がある場合は、次を使用できますpoll()
。
Resource resource;
while ((resource = resourceQueue.poll()) != null) {
this.processIncludes(resourceQueue, resource);
}
注文を気にしない場合(その場合、なぜあなたは扱っているのPriorityQueue
ですか?)、Iteratorを使用してください。優先度で反復する場合は、Javadocからのアドバイスを参照してください。
順序付きトラバーサルが必要な場合は、Arrays.sort(pq.toArray())の使用を検討してください。