java.lang.Object
java.util.random.RandomGeneratorFactory<T>
This is a factory class for generating multiple random number generators of a specific algorithm.
RandomGeneratorFactory
also provides methods for selecting random number generator algorithms. A specific RandomGeneratorFactory
can be located by using the RandomGenerator.factoryOf(String)
method, where the argument string is the name of the algorithm required. The method RandomGenerator.all()
produces a Stream
of all available RandomGenerators
that can be searched to locate a RandomGeneratorFactory
suitable to the task. There are three methods for constructing a RandomGenerator instance, depending on the type of initial seed required. create(long)
is used for long seed construction, create(byte[])
is used for byte[] seed construction, and create()
is used for random seed construction. Example;
RandomGeneratorFactory<RandomGenerator> factory = RandomGenerator.factoryOf("Random");
for (int i = 0; i < 10; i++) {
new Thread(() -> {
RandomGenerator random = factory.create(100L);
System.out.println(random.nextDouble());
}).start();
}
RandomGeneratorFactory also provides methods describing the attributes (or properties) of a generator and can be used to select random number generator algorithms. These methods are typically used in conjunction with RandomGenerator.all()
. In this example, the code locates the RandomGeneratorFactory
that produces RandomGenerators
with the highest number of state bits.
RandomGeneratorFactory<RandomGenerator> best = RandomGenerator.all()
.sorted(Comparator.comparingInt(RandomGenerator::stateBits).reversed())
.findFirst()
.orElse(RandomGenerator.factoryOf("Random"));
System.out.println(best.name() + " in " + best.group() + " was selected");
RandomGenerator rng = best.create();
System.out.println(rng.nextLong());
- Since:
- 17
- See Also:
-
java.util.random
-
Method Summary
Modifier and TypeMethodDescriptioncreate()
Create an instance ofRandomGenerator
based on algorithm chosen.create(byte[] seed)
Create an instance ofRandomGenerator
based on algorithm chosen providing a starting byte[] seed.create(long seed)
Create an instance ofRandomGenerator
based on algorithm chosen providing a starting long seed.int
Returns the equidistribution of the algorithm.group()
Return the group name of the algorithm used by the random number generator.boolean
Return true if random generator is arbitrarily jumpable.boolean
Return true if random generator is generated by hardware.boolean
Return true if random generator is jumpable.boolean
Return true if random generator is leapable.boolean
Return true if random generator is splittable.boolean
Return true if random generator is statistical.boolean
Return true if random generator is stochastic.boolean
Return true if random generator is streamable.name()
Return the name of the algorithm used by the random number generator.period()
Return the period of the algorithm used by the random number generator.int
Returns number of bits used to maintain state of seed.
-
Method Details
-
name
Return the name of the algorithm used by the random number generator.- Returns:
- Name of the algorithm.
-
group
Return the group name of the algorithm used by the random number generator.- Returns:
- Group name of the algorithm.
-
stateBits
public int stateBits()Returns number of bits used to maintain state of seed.- Returns:
- number of bits used to maintain state of seed.
-
equidistribution
public int equidistribution()Returns the equidistribution of the algorithm.- Returns:
- the equidistribution of the algorithm.
-
period
Return the period of the algorithm used by the random number generator.- Returns:
- BigInteger period.
-
isStatistical
public boolean isStatistical()Return true if random generator is statistical.- Returns:
- true if random generator is statistical.
-
isStochastic
public boolean isStochastic()Return true if random generator is stochastic.- Returns:
- true if random generator is stochastic.
-
isHardware
public boolean isHardware()Return true if random generator is generated by hardware.- Returns:
- true if random generator is generated by hardware.
-
isArbitrarilyJumpable
public boolean isArbitrarilyJumpable()Return true if random generator is arbitrarily jumpable.- Returns:
- true if random generator is arbitrarily jumpable.
-
isJumpable
public boolean isJumpable()Return true if random generator is jumpable.- Returns:
- true if random generator is jumpable.
-
isLeapable
public boolean isLeapable()Return true if random generator is leapable.- Returns:
- true if random generator is leapable.
-
isSplittable
public boolean isSplittable()Return true if random generator is splittable.- Returns:
- true if random generator is splittable.
-
isStreamable
public boolean isStreamable()Return true if random generator is streamable.- Returns:
- true if random generator is streamable.
-
create
Create an instance ofRandomGenerator
based on algorithm chosen.- Returns:
-
new in instance of
RandomGenerator
.
-
create
Create an instance ofRandomGenerator
based on algorithm chosen providing a starting long seed. If long seed is not supported by an algorithm then the no argument form of create is used.- Parameters:
-
seed
- long random seed value. - Returns:
-
new in instance of
RandomGenerator
.
-
create
Create an instance ofRandomGenerator
based on algorithm chosen providing a starting byte[] seed. If byte[] seed is not supported by an algorithm then the no argument form of create is used.- Parameters:
-
seed
- byte array random seed value. - Returns:
-
new in instance of
RandomGenerator
. - Throws:
-
NullPointerException
- if seed is null.
-