Как перемешать коллекции?

У меня есть два вопроса

  1. Как перемешать эту коллекцию? Если нельзя, то какую другую использовать? Главное, чтобы каждое число было уникально.
  2. Как обратиться к нулевому элементу этой коллекции?

Мой вывод всегда такой:

[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]); // Первый элемент.
    // Конечно, правильно проверять массив перед обращением к элементам
    // по индексу, но в данном случае я знаю, что он там есть.
}
→ Ссылка