Как перемешать коллекции?
У меня есть два вопроса
- Как перемешать эту коллекцию? Если нельзя, то какую другую использовать? Главное, чтобы каждое число было уникально.
- Как обратиться к нулевому элементу этой коллекции?
Мой вывод всегда такой:
[1, 2, 4, 5, 6, 8]
[1, 2, 4, 5, 6, 8]
[1, 2, 4, 5, 6, 8]
HashSet<Integer> usedQuestions = new HashSet<>();
Iterator<Integer> iterator = usedQuestions.iterator();
while (true) {
int РАНДОМЧИСЛО = (int) (Math.random() * МАССИВ.length);
usedQuestions.add(РАНДОМЧИСЛО);
System.out.println(usedQuestions);
if (usedQuestions.size() >= МАССИВ.length) {
break;
}
}
Ответы (2 шт):
Автор решения: gil9red
→ Ссылка
Используйте Collections.shuffle
Пример:
List<String> list = new ArrayList<>();
list.add("1. Текст1");
list.add("2. Текст2. продолжение текста");
list.add("3. Текст3. еще текст. и еще текст");
Collections.shuffle(list);
System.out.println(list);
Автор решения: Aziz Umarov
→ Ссылка
Проблема вашего примера это HashSet который не хранит порядок вставки. Заменив на LinkedHashSet вы получите желаемое:
public static void main(String[] args) throws Exception {
HashSet<Integer> usedQuestions = new LinkedHashSet<>();
while (true) {
int randomNumber = (int) (Math.random() * 8);
usedQuestions.add(randomNumber);
System.out.println(usedQuestions);
if (usedQuestions.size() >= 8) {
break;
}
}
System.out.println(usedQuestions);
System.out.println(usedQuestions.toArray()[0]); // Первый элемент.
// Конечно, правильно проверять массив перед обращением к элементам
// по индексу, но в данном случае я знаю, что он там есть.
}