2011-02-08 75 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 2011-02-08 13:00:49

1

你可以使用List或甚至一個String數組,然後用大單詞列表填充它,然後生成隨機數,然後使用該隨機數作爲索引從列表中選擇單詞。

1
  1. 你提出的地圖沒有達到你的目標,因爲包含HashMap允許您訪問與給定鍵關聯的值,不允許您訪問與值相關聯的密鑰。所以如果你使用HashMap,它應該是Map<Integer, String>

  2. HashMap比其他數據結構的主要好處是不變的查找時間:無論地圖有多大,獲取一個值的時間給定的鍵保持不變。將其與一個無序的ArrayList進行對比,其中查找元素所花費的時間可隨着List大小的增加而增加。但是,由於您不是在尋找特定的單詞,只是任何單詞,HashMap的好處不適用於您的情況。

  3. 正如其他人所說,最好的辦法似乎是:

ArrayList的話=新的ArrayList();

//添加所有單詞

隨機

R =新的隨機()//對象用於產生隨機數

字符串randomWord = words.get(r.nextInt(words.size())) ;