Класс SplittableRandom
- java.lang.Object
-
- java.util.SplittableRandom
public final class SplittableRandom extends Object
Генератор равномерных псевдослучайных значений, применимый, в том числе, для изолированных параллельных вычислений, которые могут генерировать подзадачи. Класс SplittableRandom поддерживает методы для создания псевдослучайных чисел типа int, long, и double с аналогичным использованием, как для класса Random, но отличается следующими способами:
- Последовательности сгенерированных значений проходят тестирование набора DieHarder для проверки свойств независимости и равномерности генераторов псевдослучайных чисел. (Последняя проверка была выполнена с версией 3.31.1.) Эти тесты проверяют только методы для определённых типов и диапазонов, но аналогичные свойства, по крайней мере приблизительно, ожидаются и для других. Период (длина любой последовательности сгенерированных значений до её повторения) составляет не менее 264.
- Метод
split()создаёт и возвращает новый экземпляр SplittableRandom, который не разделяет изменяемое состояние с текущим экземпляром. Однако с очень высокой вероятностью значения, сгенерированные обоими объектами, обладают теми же статистическими свойствами, как если бы то же количество значений было сгенерировано одним потоком с использованием одного объектаSplittableRandom. - Экземпляры SplittableRandom не являются потокобезопасными. Они предназначены для разделения, а не совместного использования, между потоками. Например, вычисление
fork/join-styleс использованием случайных чисел может включать построение в формеnew Subtask(aSplittableRandom.split()).fork(). - Этот класс предоставляет дополнительные методы для генерации потоков случайных чисел, которые используют вышеупомянутые методы, когда используются в режиме
stream.parallel().
Экземпляры SplittableRandom не являются криптографически безопасными. В приложениях, чувствительных к безопасности, используйте вместо этого SecureRandom. Кроме того, экземпляры, созданные по умолчанию, не используют криптографически случайное семя, если системная переменная java.util.secureRandomSeed не установлена в значение true.
- Since:
- 1.8
Конструкторы
| Конструктор и описание |
|---|
SplittableRandom() Создаёт новый экземпляр SplittableRandom, который, вероятно, сгенерирует последовательности значений, статистически независимые от последовательностей других экземпляров в текущей программе; и может, и обычно, отличается при разных запусках программы. |
SplittableRandom(long seed) Создаёт новый экземпляр SplittableRandom, используя указанное начальное семя. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
DoubleStream |
doubles() Возвращает эффективно неограниченный поток псевдослучайных значений типа |
DoubleStream |
doubles(double randomNumberOrigin,
double randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных значений типа |
DoubleStream |
doubles(long streamSize) Возвращает поток, производящий заданное количество |
DoubleStream |
doubles(long streamSize,
double randomNumberOrigin,
double randomNumberBound) Возвращает поток, производящий заданное количество |
IntStream |
ints() Возвращает эффективно неограниченный поток псевдослучайных значений типа |
IntStream |
ints(int randomNumberOrigin,
int randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных значений типа |
IntStream |
ints(long streamSize) Возвращает поток, производящий заданное количество |
IntStream |
ints(long streamSize,
int randomNumberOrigin,
int randomNumberBound) Возвращает поток, производящий заданное количество |
LongStream |
longs() Возвращает эффективно неограниченный поток псевдослучайных значений типа |
LongStream |
longs(long streamSize) Возвращает поток, производящий заданное количество |
LongStream |
longs(long randomNumberOrigin,
long randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных значений типа |
LongStream |
longs(long streamSize,
long randomNumberOrigin,
long randomNumberBound) Возвращает поток, производящий заданное количество |
boolean |
nextBoolean() Возвращает псевдослучайное значение типа |
double |
nextDouble() Возвращает псевдослучайное значение типа |
double |
nextDouble(double bound) Возвращает псевдослучайное значение типа |
double |
nextDouble(double origin,
double bound) Возвращает псевдослучайное значение типа |
int |
nextInt() Возвращает псевдослучайное значение типа |
int |
nextInt(int bound) Возвращает псевдослучайное значение типа |
int |
nextInt(int origin,
int bound) Возвращает псевдослучайное значение типа |
long |
nextLong() Возвращает псевдослучайное значение типа |
long |
nextLong(long bound) Возвращает псевдослучайное значение типа |
long |
nextLong(long origin,
long bound) Возвращает псевдослучайное значение типа |
SplittableRandom |
split() Создаёт и возвращает новый экземпляр SplittableRandom, который не разделяет изменяемое состояние с этим экземпляром. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
SplittableRandom
public SplittableRandom(long seed)
Создаёт новый экземпляр SplittableRandom, используя указанное начальное значение. Экземпляры SplittableRandom, созданные с одним и тем же значением seed в одной и той же программе, генерируют одинаковые последовательности значений.
- Параметры:
-
seed- начальное значение seed
SplittableRandom
public SplittableRandom()
Создаёт новый экземпляр SplittableRandom, который, скорее всего, сгенерирует последовательности значений, статистически независимые от значений любых других экземпляров в текущей программе; и может, и обычно меняется при каждом запуске программы.
Методы
split
public SplittableRandom split()
Создаёт и возвращает новый экземпляр SplittableRandom, который не разделяет мутабельное состояние с этим экземпляром. Однако с очень высокой вероятностью набор значений, генерируемых двумя объектами, обладает теми же статистическими свойствами, что и если бы одно и то же количество значений было сгенерировано одним потоком с использованием одного объекта SplittableRandom. Любой или оба из двух объектов могут быть дополнительно разделены с помощью метода split(), и те же ожидаемые статистические свойства применяются ко всему набору генераторов, построенных при таком рекурсивном разделении.
- Возвращает:
- новый экземпляр SplittableRandom
nextInt
public int nextInt()
Возвращает псевдослучайное int значение.
- Возвращает:
- псевдослучайное
intзначение
nextInt
public int nextInt(int bound)
Возвращает псевдослучайное int значение между нулём (включительно) и указанным пределом (исключительно).
- Параметры:
-
bound- верхний предел (исключительно). Должен быть положительным. - Возвращает:
- псевдослучайное
intзначение между нулём (включительно) и пределом (исключительно) - Исключения:
-
IllegalArgumentException- еслиboundне является положительным
nextInt
public int nextInt(int origin,
int bound) Возвращает псевдослучайное int значение между указанным началом (включительно) и указанным пределом (исключительно).
- Параметры:
-
origin- наименьшее возвращаемое значение -
bound- верхний предел (исключительно) - Возвращает:
- псевдослучайное
intзначение между началом (включительно) и пределом (исключительно) - Исключения:
-
IllegalArgumentException- еслиoriginбольше или равноbound
nextLong
public long nextLong()
Возвращает псевдослучайное long значение.
- Возвращает:
- псевдослучайное
longзначение
nextLong
public long nextLong(long bound)
Возвращает псевдослучайное long значение между нулём (включительно) и указанным пределом (исключительно).
- Параметры:
-
bound- верхний предел (исключительно). Должен быть положительным. - Возвращает:
- псевдослучайное
longзначение между нулём (включительно) и пределом (исключительно) - Исключения:
-
IllegalArgumentException- еслиboundне является положительным
nextLong
public long nextLong(long origin,
long bound) Возвращает псевдослучайное long значение между указанным началом (включительно) и указанным пределом (исключительно).
- Параметры:
-
origin- наименьшее возвращаемое значение -
bound- верхний предел (исключительно) - Возвращает:
- псевдослучайное
longзначение между началом (включительно) и пределом (исключительно) - Исключения:
-
IllegalArgumentException- еслиoriginбольше или равноbound
nextDouble
public double nextDouble()
Возвращает псевдослучайное double значение между нулём (включительно) и единицей (исключительно).
- Возвращает:
- псевдослучайное
doubleзначение между нулём (включительно) и единицей (исключительно)
nextDouble
public double nextDouble(double bound)
Возвращает псевдослучайное double значение между 0.0 (включительно) и указанным пределом (исключительно).
- Параметры:
-
bound- верхний предел (исключительно). Должен быть положительным. - Возвращает:
- псевдослучайное
doubleзначение между нулём (включительно) и пределом (исключительно) - Исключения:
-
IllegalArgumentException- еслиboundне является положительным
nextDouble
public double nextDouble(double origin,
double bound) Возвращает псевдослучайное double значение между указанным началом (включительно) и пределом (исключительно).
- Параметры:
-
origin- наименьшее возвращаемое значение -
bound- верхний предел (исключительно) - Возвращает:
- псевдослучайное
doubleзначение между началом (включительно) и пределом (исключительно) - Исключения:
-
IllegalArgumentException- еслиoriginбольше или равноbound
nextBoolean
public boolean nextBoolean()
Возвращает псевдослучайное boolean значение.
- Возвращает:
- псевдослучайное
booleanзначение
ints
public IntStream ints(long streamSize)
Возвращает поток, генерирующий заданное streamSize количество псевдослучайных int значений из этого генератора и/или разделенного от него.
- Параметры:
-
streamSize- количество значений для генерации - Возвращает:
- поток псевдослучайных
intзначений - Исключения:
-
IllegalArgumentException- еслиstreamSizeменьше нуля
ints
public IntStream ints()
Возвращает эффективно неограниченный поток псевдослучайных int значений из этого генератора и/или разделенного от него.
- Замечание по реализации:
- Этот метод реализован эквивалентно
ints(Long.MAX_VALUE). - Возвращает:
- поток псевдослучайных
intзначений
ints
public IntStream ints(long streamSize,
int randomNumberOrigin,
int randomNumberBound) Возвращает поток, генерирующий заданное streamSize количество псевдослучайных int значений из этого генератора и/или разделенного от него; каждое значение соответствует заданному началу (включительно) и пределу (исключительно).
- Параметры:
-
streamSize- количество значений для генерации -
randomNumberOrigin- начало (включительно) каждого случайного значения -
randomNumberBound- предел (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных
intзначений, каждое с заданным началом (включительно) и пределом (исключительно) - Исключения:
-
IllegalArgumentException- еслиstreamSizeменьше нуля, илиrandomNumberOriginбольше или равноrandomNumberBound
ints
public IntStream ints(int randomNumberOrigin,
int randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных int значений из этого генератора и/или разделенного от него; каждое значение соответствует заданному началу (включительно) и пределу (исключительно).
- Замечание по реализации:
- Этот метод реализован эквивалентно
ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound). - Параметры:
-
randomNumberOrigin- начало (включительно) каждого случайного значения -
randomNumberBound- предел (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных
intзначений, каждое с заданным началом (включительно) и пределом (исключительно) - Исключения:
-
IllegalArgumentException- еслиrandomNumberOriginбольше или равноrandomNumberBound
longs
public LongStream longs(long streamSize)
Возвращает поток, генерирующий заданное streamSize количество псевдослучайных long значений из этого генератора и/или разделенного от него.
- Параметры:
-
streamSize- количество значений для генерации - Возвращает:
- поток псевдослучайных
longзначений - Исключения:
-
IllegalArgumentException- еслиstreamSizeменьше нуля
longs
public LongStream longs()
Возвращает эффективно неограниченный поток псевдослучайных long значений из этого генератора и/или разделенного от него.
- Замечание по реализации:
- Этот метод реализован эквивалентно
longs(Long.MAX_VALUE). - Возвращает:
- поток псевдослучайных
longзначений
longs
public LongStream longs(long streamSize,
long randomNumberOrigin,
long randomNumberBound) Возвращает поток, генерирующий заданное streamSize количество псевдослучайных long значений из этого генератора и/или разделенного от него; каждое значение соответствует заданному началу (включительно) и пределу (исключительно).
- Параметры:
-
streamSize- количество значений для генерации -
randomNumberOrigin- начало (включительно) каждого случайного значения -
randomNumberBound- предел (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных
longзначений, каждое с заданным началом (включительно) и пределом (исключительно) - Исключения:
-
IllegalArgumentException- еслиstreamSizeменьше нуля, илиrandomNumberOriginбольше или равноrandomNumberBound
longs
public LongStream longs(long randomNumberOrigin,
long randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных long значений из этого генератора и/или разделенного от него; каждое значение соответствует заданному началу (включительно) и пределу (исключительно).
- Замечание по реализации:
- Этот метод реализован эквивалентно
longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound). - Параметры:
-
randomNumberOrigin- начало (включительно) каждого случайного значения -
randomNumberBound- предел (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных
longзначений, каждое с заданным началом (включительно) и пределом (исключительно) - Исключения:
-
IllegalArgumentException- еслиrandomNumberOriginбольше или равноrandomNumberBound
doubles
public DoubleStream doubles(long streamSize)
Возвращает поток, генерирующий заданное streamSize количество псевдослучайных double значений из этого генератора и/или разделенного от него; каждое значение находится между нулём (включительно) и единицей (исключительно).
- Параметры:
-
streamSize- количество генерируемых значений - Возвращает:
- поток значений
double - Выбрасывает:
-
IllegalArgumentException- еслиstreamSizeменьше нуля
doubles
public DoubleStream doubles()
Возвращает эффективно неограниченный поток псевдослучайных значений double из этого генератора и/или из одного разделенного; каждое значение находится в диапазоне от нуля (включительно) до единицы (исключительно).
- Примечание к реализации:
- Этот метод реализован для эквивалентности
doubles(Long.MAX_VALUE) - Возвращает:
- поток псевдослучайных значений
double
doubles
public DoubleStream doubles(long streamSize,
double randomNumberOrigin,
double randomNumberBound) Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений double из этого генератора и/или из одного разделенного; каждое значение соответствует заданному началу (включительно) и границе (исключительно).
- Параметры:
-
streamSize- количество генерируемых значений -
randomNumberOrigin- начальное значение (включительно) для каждого случайного значения -
randomNumberBound- граница (исключительно) для каждого случайного значения - Возвращает:
- поток псевдослучайных значений
double, каждое с заданным началом (включительно) и границей (исключительно) - Выбрасывает:
-
IllegalArgumentException- еслиstreamSizeменьше нуля -
IllegalArgumentException- еслиrandomNumberOriginбольше или равноrandomNumberBound
doubles
public DoubleStream doubles(double randomNumberOrigin,
double randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных значений double из этого генератора и/или из одного разделенного; каждое значение соответствует заданному началу (включительно) и границе (исключительно).
- Примечание к реализации:
- Этот метод реализован для эквивалентности
doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound) - Параметры:
-
randomNumberOrigin- начальное значение (включительно) для каждого случайного значения -
randomNumberBound- граница (исключительно) для каждого случайного значения - Возвращает:
- поток псевдослучайных значений
double, каждое с заданным началом (включительно) и границей (исключительно) - Выбрасывает:
-
IllegalArgumentException- еслиrandomNumberOriginбольше или равноrandomNumberBound
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.