私のアプリケーションには、いくつかのキューとプライオリティキューがあります。これらのキュー内のn番目のアイテムに簡単にアクセスしたいが、APIを使用して簡単に行う方法は見当たらない。私はイテレータを作成してn番目に反復するか、toArray()[index]を使うことができると思いますが、より簡単な方法があるはずです。Javaでキュー内のn番目のアイテムを取得するにはどうすればよいですか?
何か不足していますか?
私のアプリケーションには、いくつかのキューとプライオリティキューがあります。これらのキュー内のn番目のアイテムに簡単にアクセスしたいが、APIを使用して簡単に行う方法は見当たらない。私はイテレータを作成してn番目に反復するか、toArray()[index]を使うことができると思いますが、より簡単な方法があるはずです。Javaでキュー内のn番目のアイテムを取得するにはどうすればよいですか?
何か不足していますか?
何か不足していますか?
はい - インデックスによる要素へのアクセスがキューの概念の一部ではないという事実。
インデックスで要素にアクセスする必要がある場合は、qeueではなくリストが必要です。
キューの全ポイントは、先頭(最初の要素)へのアクセスのみを公開することです。リニアデータ構造の要素に任意にアクセスするには、List
を使用します(プッシュ/ポップよりも多くの検索を行う場合は、がランダムアクセスに最適化されていないため、ArrayList
を使用することを検討してください)。
'LinkedList'は' Queue'、 'ArrayList'を実装していません。 –
@his:私の答えのポイントは、ランダムアクセスをサポートしていないのでキューADTを使用すべきではありませんでしたが、Listを使用する必要があります(両方とも実装しています)。だから私は妥当性を見ない。 –
私はあなたが
Queues
のために使用されている具体的などのようなデータ型
私のアプリケーションでは、キューと優先度キューの数を持っていますか? A LinkedList
?この場合、n
番目の要素をリンクリストにキャストして戻すことができます。
しかし、これはあなたがあなたがまた、正しいデータ構造を使用していないようだ質問からあなたは、プライオリティキューについてはQueue
を使用する方法ではありません。
優先度キューは常に最小要素(順序付けによって)を返します。
n
ここの要素はどういう意味ですか?n
が最小か、n
が挿入されていますか?したがって、実際にこの場合に何をすべきかを言うことはできません。
'LinkedList'のn番目の要素を取得することは、' Queue'を介してn番目の要素に反復処理するのと同じことに注意してください。 –
@ MarkPeters:あなたは正しいですが、これは 'Queue'の適切な使用ではなく、コードでこれを見るのは厄介です。あなたがより良くしようとしていることを反映しているため、直接 'LinkedList'として扱います。 – Cratylus
@user:' List'を使う方が良いですが、 'Queue'を反復することは* casting * 'LinkedList'は自分自身を実装の詳細に結びつけているからです。 OPに「Queue」を提供するコードを変更する機能がある場合は、私は完全に同意します。 –
キューは概念によってインデックス化されたランダムアクセスを許可していません。両方の種類のアクセスが同時に必要な場合(設計上の悪影響)、List
とQueue
(たとえばLinkedList
)の両方を実装するデータ型を使用できます。
ArrayListをスタックとして使用します。特定の項目が必要なときは、get(x)を使うことができます。 –
キューのアイデアに逆らっていませんか?キューは、FIFO構造であると考えられ、マップやアレイのようなオンデマンドアクセスではありません。リストのようなものに対してキューを使用している理由はありますか? – dardo
'Queue'インターフェースは要素への直接的な要素アクセスを前面に限定し、イテレータを介してアクセスするだけです。あなたのために、おそらく 'List'ベースのコレクションが必要です。 – birryree