Если у вас действительно нет произвольного доступа, и у вас очень большой список, и вы не можете скопировать его, тогда вы можете сделать следующее:
int n = 2
iterator i = ...
Random rand = new Random();
Object candidate = i.next();
while (i.hasNext()) {
if (rand.nextInt(n)) {
candidate = i.next();
} else {
i.next();
}
n++;
}
return candidate;
Это сохранит случайный элементиз списка, но требует, чтобы вы пересекали весь список.Если вы хотите по-настоящему равномерно распределенное значение, у вас нет другого выбора, кроме как сделать это.
В качестве альтернативы, если количество элементов мало, или если вы хотите случайную перестановку списка неизвестного размера (другими словамиВы хотите получить доступ ко всем элементам списка в произвольном порядке), затем я рекомендую скопировать все ссылки в новый список (это не займет значительный объем памяти, если у вас нет миллионов элементов, поскольку вы храните только ссылки),Затем либо используйте get со случайным целым числом, либо используйте стандартный метод java.util.Collections shuffle для перестановки списка.