【问题标题】:Datastructure for random word retrieval随机词检索的数据结构
【发布时间】:2011-06-23 10:13:33
【问题描述】:

我正在尝试用 Java 构建一个基于文字的游戏应用程序。我浏览了一些现有的问题,并了解了如何获取单词表。我提到的一些问题:

How to pick a random english word from a list

Random word selection

我的动机是生成一个随机词。将单词列表下载为文本文件后,我正在尝试生成一个

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

这可以给我一个词,因为我可以使用生成的随机整数来查询它。

这是推荐的方法还是有更好的方法从单词列表中生成随机单词?

谢谢。

【问题讨论】:

    标签: java data-structures hashmap


    【解决方案1】:

    将单词列表粘贴到数组或ArrayList中,然后选择一个随机索引。 ArrayList 更易于使用,因为它可以在您阅读字典文件时动态增长。

    【讨论】:

    • 从这篇文章 (stackoverflow.com/questions/1518103/…) 我可以理解HashMap 在随机检索方面比ArrayList 有更好的性能。我错了吗?
    • @bdhar 不幸的是,在你已经拥有它之前,你无法从 HashMap 中得到你想要的东西
    • @bdhar 按索引查找项目和使用任意键是有区别的。对于前者,没有什么比数组(或 ArrayList)更好的了,这就是你的情况。
    • @gasan - 如果HashMap 是这样的:new HashMap&lt;Integer, String&gt;(),随机数将是Integer,我可以使用HashMap.get(Integer) 得到一个随机词,对吧??
    • @bdhar 对。但这将是不必要的性能和资源消耗
    【解决方案2】:

    您可以使用 List 甚至是 String 数组并用大单词列表填充它,然后生成随机数,然后使用该随机数作为索引从列表中选择单词。

    【讨论】:

      【解决方案3】:
      1. 您提出的 Map 没有达到您的目标,因为 HashMaps 允许您访问与给定键关联的值,不允许您访问与值关联的键。所以如果你使用HashMap,应该是Map&lt;Integer, String&gt;

      2. HashMap 与其他数据结构相比的主要优势在于恒定的查找时间:无论映射有多大,检索给定键的值所需的时间都保持不变。将此与无序的 ArrayList 进行对比,其中查找元素所需的时间会随着 List 大小的增加而增加。但是,由于您不是在寻找特定的词,只是任何词,因此 HashMap 的好处不适用于您的情况。

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

      ArrayList words = new ArrayList();

      //添加所有单词

      Random r = new Random() //生成随机数的对象

      String randomWord = words.get(r.nextInt(words.size()));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-17
        • 2018-09-10
        • 2016-12-29
        • 1970-01-01
        • 2015-08-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-01
        相关资源
        最近更新 更多