2011-02-08 13 views
0

私はJavaで単語ベースのゲームアプリケーションを構築しようとしています。私はいくつかの既存の質問を閲覧し、単語リストを取得する方法をいくつか考えました。ランダムワード検索のためのデータ構造

How to pick a random english word from a list

Random word selection

私の動機は、ランダムな単語を生成することです:私の質問のいくつかは言及しています。テキストファイルとしてダウンロード単語リストを取得した後、私は私が生成されたランダムな整数を使用して、それを照会可能性があるので、私に言葉を与えることができる

Map<String, Integer> m = new HashMap<String, Integer>(); 

を生成しようとしています。

これは推奨される方法ですか、それともワードリストからランダムな単語を生成する良い方法がありますか?

ありがとうございました。

答えて

4

単語リストを配列ArrayListに貼り付け、ランダムなインデックスを選択します。 ArrayListは、辞書ファイルを読んでいるときに動的に成長するため、扱いが簡単です。

+0

この記事(http://stackoverflow.com/questions/1518103/hashmap-vs-arraylist-performance-am-i-correct)から、「HashMap」は、「ArrayList」よりも優れたパフォーマンスを持つことが理解できますランダム検索。私が間違っている? – bdhar

+0

@bdhar残念ながら、すでにHashMapから必要なものを手に入れることはできません。 – dhblah

+0

@bdharインデックスで項目を検索し、任意のキーを使用するのに違いがあります。あなたの場合は、前者の配列(またはArrayList)に勝るものはありません。 – NPE

1

リストまたは文字列配列を使用して大きな単語リストを入力してから乱数を生成し、その乱数をインデックスとして使用してリストから単語を選択することができます。

1
  1. あなたの提案地図はハッシュマップは、あなたが与えられたキーに関連付けられた値にアクセスすることを可能にするので、あなたが値に関連付けられたキーにアクセスすることはできません、あなたの目標を達成していません。あなたがHashMapを使用している場合だから、それは他のデータ構造の上にはHashMapの主な利点は、一定の検索時間であるMap<Integer, String>

  2. 次のようになります。関係なく、マップが取得するどのように大きな、時間はそれが値を取得するために取りません与えられたキーは同じままです。 Listのサイズが大きくなるにつれて、要素を探すのにかかる時間が長くなる順序のないArrayListと対照的です。しかし、あなたが特定の単語を探しているわけではないので、HashMapの利点はあなたには当てはまりません。他の人のよう

  3. が言った、最善のアプローチは、のようだ:

ArrayListの言葉=新しいArrayListを();

//追加したすべての単語

ランダムはr =新しいランダム()乱数

を生成するためのオブジェクト//

文字列randomWord = words.get(r.nextInt(words.size())) ;

関連する問題