簡體   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