В Java 8+ вы можете использовать ints
метод Random
, чтобы получить IntStream
случайных значений, а затем distinct
и limit
для уменьшения потока до числа уникальных случайных значений.
ThreadLocalRandom.current().ints(0, 100).distinct().limit(5).forEach(System.out::println);
Random
также имеет методы, которые создают LongStream
s и DoubleStream
s, если они вам нужны.
Если вы хотите, чтобы все (или большое количество) чисел в диапазоне в случайном порядке, было бы более эффективно добавить все числа в список, перемешать его и взять первые n, потому что приведенный выше пример в настоящее время реализуется путем генерации случайных чисел в запрошенном диапазоне и передачи их через набор (аналогично ответу Роба Килти ), что может потребовать генерации гораздо большего, чем сумма, переданная для ограничения, поскольку вероятность генерации новый уникальный номер уменьшается с каждым найденным. Вот пример другого способа:
List<Integer> range = IntStream.range(0, 100).boxed()
.collect(Collectors.toCollection(ArrayList::new));
Collections.shuffle(range);
range.subList(0, 99).forEach(System.out::println);