9

優先キューの反復を含むJava割り当てがあります。キューは文字列とintを含むオブジェクトで構成されており、キュー内のすべてのオブジェクトに対して個別のオブジェクトの文字列をチェックする方法が必要です。

これをイテレータオブジェクトにするのが最善の方法でしょうか?それはあまりにも厄介なようです。デキューしてエンキューすることはできますが、それは非効率的なようです。たぶんforeachループ?

4

3 に答える 3

11

はい、コレクション内のすべての要素をチェックする必要がある場合は、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
}
于 2012-12-07T07:29:32.303 に答える
5

1つの小さな詳細:ループ中にキューが変更される可能性がある場合は、両方iteratorfor eachが発生しConcurrentModificationExceptionます。処理中にキューが変更される可能性がある場合は、次を使用できますpoll()

    Resource resource;
    while ((resource = resourceQueue.poll()) != null) {
        this.processIncludes(resourceQueue, resource);
    }
于 2015-06-01T18:44:27.277 に答える
1

注文を気にしない場合(その場合、なぜあなたは扱っているのPriorityQueueですか?)、Iteratorを使用してください。優先度で反復する場合は、Javadocからのアドバイスを参照してください。

順序付きトラバーサルが必要な場合は、Arrays.sort(pq.toArray())の使用を検討してください。

于 2012-12-07T08:05:51.440 に答える