java - 如何在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 或类似的东西并从哈希表中的某处获取随机对以返回(当然也删除它)。
解决方案
您不会“打乱” aHashtable
或Map
- 元素没有排序。
也就是说,aniterator
通常每次都会返回相同的顺序,因此为了改变它,将键放入 anArrayList
并Collections.shuffle
在其上使用。遍历该混洗列表并通过它们的键访问表/映射中的元素。
推荐阅读
- python - TypeError:“int”对象不可调用(生成器错误)
- javascript - MongoDB意外崩溃流星
- reactjs - 页面已加载时,React Redux 不会更改道具
- .net - UdpClient 校验和如何工作
- vba - VBS 和 Macro 之间 QueryTables.add 的区别
- angular - 在 Angular 7 应用程序中与 facebook 连接
- postgresql - 在创建 docker 容器时导入数据库 - 需要使用 pg_restore
- typescript - 如何在本机反应中使用带有 map() 的 Promise
- macos - dnsmasq 如何在 Mac OS 上使用 .localhost 而不是 Chrome 中的 .dev
- javascript - 每个帐户的新子域,Firebase / React