繁体   English   中英

如何在Java中随机播放哈希表

[英]How to shuffle a Hashtable in java

我在一个类中有一个构造函数,在其中初始化一个哈希表,该哈希表由一个整数和一个字符串列表组成。 我用从0到所需数字的数字填充键,它们的对应值是我预先在构造函数中创建的Vector。 我需要的是随机重新排列它们(只要以任何可能的方式随机排列它们),这样当我使用getQuest()时,我将得到一个恰好位于哈希表最后一个位置的随机键值对并将其删除与此同时。

public class Quest {

private Hashtable<Integer, List<String>> quests;

public Quest()
{
    this.quests = new Hashtable<>();
    List<String> mushrooms = new Vector<>();
    mushrooms.add("Choose a mushroom, but be careful not to be poisoned");
    mushrooms.add("mushroom1");
    mushrooms.add("mushroom2");
    mushrooms.add("mushroom3");
    List<String> weapons = new Vector<>();
    weapons.add("Choose a weapon that will help you survive");
    weapons.add("knife");
    weapons.add("rifle");
    weapons.add("sword");
    this.quests.put(0, mushrooms);
    this.quests.put(1, weapons);
}

public List<String> getQuest()
{
    return quests.remove(quests.size());

}
}

另外,如果这不是一个好主意,最好使用rand或类似的方法,并从哈希表中的某处获取随机对以返回(当然也要删除它)。

您不会“随机整理” HashtableMap -元素没有顺序。

就是说, iterator通常每次都会返回相同的顺序,因此要更改此顺序,请将键放入ArrayList并在其上使用Collections.shuffle 遍历该混洗的列表,并通过键访问表/映射中的元素。

使用列表而不是哈希表,并在随机索引处删除项目。

另外,如果按照自己的方式进行操作,则此行:

return quests.remove(quests.size());

应该

return quests.remove(quests.size()-1);

您可能还想检查quests.size()> 0 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM