首页 > 解决方案 > 如何在java中洗牌一个哈希表

问题描述

我在一个类中有一个构造函数,我在其中初始化一个哈希表,由一个整数和一个字符串列表组成。我用从 0 到任何需要的数字填充键,它们对应的值是我事先在构造函数中创建的向量。我需要的是随机重新排列它们(只是以任何可能的方式随机排列它们),这样当我使用 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 或类似的东西并从哈希表中的某处获取随机对以返回(当然也删除它)。

标签: javaclassdictionaryhashtableshuffle

解决方案


您不会“打乱” aHashtableMap- 元素没有排序。

也就是说,aniterator通常每次都会返回相同的顺序,因此为了改变它,将键放入 anArrayListCollections.shuffle在其上使用。遍历该混洗列表并通过它们的键访问表/映射中的元素。


推荐阅读