2012-01-31 4 views
3

キューが多数あり、それぞれに一意のIDがある場合は、キューのハッシュテーブルが使用できますか?私はこれを尋ねているのが奇妙に思えるが、最適化のためのよりよい方法があるかどうかは疑問だ。キューのコレクションのJavaデータ構造

ご迷惑をおかけして申し訳ありません。私は基本的に、クライアントIDで識別されるメッセージのキューを格納しています。 クライアントはサーバーからメッセージを取得するよう要求します。 ackがサーバーに到達しない場合、クライアントが最も古いメッセージを取得しようとするまで、メッセージはキューに残ります。 考えられるのは、クライアントがACKに失敗した場合にすべてのメッセージを保持し、すべてのメッセージをFIFO方式で取得することです。

+1

最適化の....何ですか?何よりもいい?投票を終了する。 – duffymo

+0

アプリケーションをプロファイリングして、キューを最適化することについて考える*の価値があるかどうかを判断しましたか? –

+0

'Hashtable'または' Hashmap'の使用は、同時アクセスの必要性に依存します。 'ConcurrentHashMap'を使用して並行処理を行う必要がある場合は、より良い選択肢になります。 –

答えて

5

この質問では、これで何をしたいのかについての詳細は示されていません。そして、これは非常に重要です。なぜなら、使用パターンは、どのデータ構造が最も効率的になるかを決定する上で重要であるからです。あなたのユースケースではです。

しかし、私は他の詳細がないと、HashTableのキーが賢明な選択肢のように聞こえると言うでしょう.HashTableはIDをキーとして使用し、対応するQueueを値として使用します。

次に、以下の操作は、両方の非常に低いオーバーヘッドでO(1)のようになります。

  • 指定されたIDを持つキューから最初の項目を引い所与ID
  • でキューにアイテムを追加しますJavaは静的に型付けされているので
  • 、おそらくほとんどの場合、あなたが必要としようとしている使用パターンです

.....

+1

私は何をお探しですか? – Maurice

0

、私は間違いなく、ハッシュテーブルを使用することになり... (すなわち、最適化について話している場合)

+0

答えにもう少し説明してください。 –

+0

よく....静的に型付けされた言語の配列サイズは、配列が使用される前に定義されています。したがって、あなたのコレクションに一定数のキューしか持たないので、配列を使うのは悪いです。しかし、Ruby、Python、PHPなどの動的型指定言語を使用していた場合は、サイズを指定しないで配列を使用することができます。そのため、配列のいずれかを使用していた場合、動的な型付けされた言語(あなたがより良いインデックスシステム、つまり0,1,2 ...を持つので)が、Javaはその1つではないので、ハッシュテーブルはあなたの最良の選択です。 – bernabas

+1

@bernabasdあなたは元の答えを編集して詳細を追加できます – Rafay

関連する問題