Как перемешать Hashtable в Java - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть конструктор в классе, где я инициализирую хеш-таблицу, состоящую из целого числа и списка строк.Я заполняю ключи числами от 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 или что-то в этом роде и получить случайную пару откуда-нибудь из хеш-таблицы для возврата (хотя такжеконечно, удалив).

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Вы не «перемешиваете» a Hashtable или Map - элементы не упорядочены.

Тем не менее, iterator обычно будет возвращать один и тот же порядок каждый раз, поэтому, чтобы изменить это, поместите ключи в ArrayList и используйте Collections.shuffle для этого.Перебирайте этот перемешанный список и получайте доступ к элементам таблицы / карты по их ключу.

0 голосов
/ 07 декабря 2018

Используйте список вместо хеш-таблицы и удалите элемент со случайным индексом.

Кроме того, если вы делаете это по-своему, эта строка:

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

должна быть

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

Вы также можете проверить, если квесты.size ()> 0 ...

...