Мне нужно сохранить уникальный список видимых элементов, и мне также нужно время от времени выбирать случайное. Для меня есть два простых способа.
-
Сохранять элементы, видимые в наборе, что дает мне уникальность элементов. Когда вам нужно выбрать случайный вариант, сделайте следующее:
elementsSeen.toArray()[random.nextInt(elementsSeen.size())]
-
Сохранять элементы в списке - таким образом нет необходимости преобразовывать в массив, поскольку есть функция get(), когда мне нужно запросить случайную. Но здесь мне нужно будет сделать это при добавлении.
if (elementsSeen.indexOf(element)==-1) {elementsSeen.add(element);}
Итак, мой вопрос в том, какой способ был бы более эффективным? Является ли преобразование в массив более потребляющим или indexOf хуже? Что делать, если попытка добавить элемент выполняется 10 или 100 или 1000 раз чаще?
Я заинтересован в том, как максимально эффективно использовать функциональность списка (доступ по индексу) с помощью набора (уникальное добавление).