如何在 java 中打乱哈希表
How to shuffle a Hashtable in java
我在 class 中有一个构造函数,我在其中初始化一个哈希表,该哈希表由一个整数和一个字符串列表组成。我用从 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 或类似的东西并从哈希表中的某处获取随机对到 return(当然也同时删除它).
使用列表而不是哈希表,并删除随机索引处的项目。
此外,如果按您的方式进行,则此行:
return quests.remove(quests.size());
应该是
return quests.remove(quests.size()-1);
您可能还想检查是否 quests.size() > 0...
您不会“打乱”Hashtable
或 Map
- 元素未排序。
也就是说,iterator
通常每次都会 return 相同的顺序,所以为了改变它,将密钥放入 ArrayList
并使用 [=14= 】 在那之上。遍历该随机列表并通过它们的键访问 table/map 中的元素。
我在 class 中有一个构造函数,我在其中初始化一个哈希表,该哈希表由一个整数和一个字符串列表组成。我用从 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 或类似的东西并从哈希表中的某处获取随机对到 return(当然也同时删除它).
使用列表而不是哈希表,并删除随机索引处的项目。
此外,如果按您的方式进行,则此行:
return quests.remove(quests.size());
应该是
return quests.remove(quests.size()-1);
您可能还想检查是否 quests.size() > 0...
您不会“打乱”Hashtable
或 Map
- 元素未排序。
也就是说,iterator
通常每次都会 return 相同的顺序,所以为了改变它,将密钥放入 ArrayList
并使用 [=14= 】 在那之上。遍历该随机列表并通过它们的键访问 table/map 中的元素。