Статья

Как сгенерировать последовательность случайных чисел в Java?

В этой статье мы разберемся, как получить случайное значение типа int в заданном диапазоне. Есть несколько способов добиться этого, которые зависят от используемой версии Java.

Java 1.7 и выше

В Java 1.7 или более поздней версии стандартный способ сделать это выглядит так:
import java.util.concurrent.ThreadLocalRandom;

// nextInt обычно не включает значение верхней границы диапазона, поэтому нужно добавить 1

int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);
Класс ThreadLocalRandom является эквивалентом класса java.util.Random для многопоточной среды. Генерация случайного числа осуществляется локально в каждом из потоков. Таким образом, мы добиваемся лучшей производительности за счет уменьшения конфликтов.

Java 8 и выше

Для fork join пулов и параллельных стримов нужно использовать класс SplittableRandom, который обычно быстрее, обладает лучшей статистической независимостью и свойствами однородности по сравнению с классом ThreadLocalRandom.
Чтобы сгенерировать случайное значение int в диапазоне [0, 10] достаточно написать следующий код:
int n = new SplittableRandom().nextInt(0, 11);
В следующем примере генерируется случайный массив int[20] значений в диапазоне [0, 10]:
int[] array = new SplittableRandom().ints(20, 0, 11).parallel().toArray();
java