2011-02-08 38 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())) ;