public class MersenneTwister
extends java.util.Random
implements java.io.Serializable
MersenneTwister is a dropin subclass replacement for java.util.Random. It is properly synchronized and can be used in a multithreaded environment.
MersenneTwisterFast is not a subclass of java.util.Random. It has the same public methods as Random does, however, and it is algorithmically identical to MersenneTwister. MersenneTwisterFast has hardcode inlined all of its methods directly, and made all of them final (well, the ones of consequence anyway). Further, these methods are not synchronized, so the same MersenneTwisterFast instance cannot be shared by multiple threads. But all this helps MersenneTwisterFast achieve over twice the speed of MersenneTwister.
About the Mersenne Twister. This is a Java version of the Cprogram for MT19937: Integer version. next(32) generates one pseudorandom unsigned integer (32bit) which is uniformly distributed among 0 to 2^321 for each call. next(int bits) >>>'s by (32bits) to get a value ranging between 0 and 2^bits1 long inclusive; hope that's correct. setSeed(seed) set initial values to the working area of 624 words. For setSeed(seed), seed is any 32bit integer except for 0.
Orignally Coded by Takuji Nishimura, considering the suggestions by Topher Cooper and Marc Rieffel in JulyAug. 1997. More information can be found here.
Translated to Java by Michael Lecuyer January 30, 1999 Copyright (C) 1999 Michael Lecuyer
This library is free software; you can redistribute it and or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 021111307 USA
Makoto Matsumoto and Takuji Nishimura, the original authors ask "When you use this, send an email to: matumoto@math.keio.ac.jp with an appropriate reference to your work" You might also point out this was a translation.
Reference. M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623Dimensionally Equidistributed Uniform PseudoRandom Number Generator", ACM Transactions on Modeling and Computer Simulation, Vol. 8, No. 1, January 1998, pp 330.
About this version. This is a modification of the original code made to conform to proper java.util.Random format by Sean Luke, August 7, 1999.
Bug Fixes. This implementation implements the bug fixes made in Java 1.2's version of Random, which means it can be used with earlier versions of Java. See the JDK 1.2 java.util.Random documentation for further documentation on the randomnumber generation contracts made. Additionally, there's an undocumented bug in the JDK java.util.Random.nextBytes() method, which this code fixes.
Important Note. Just like java.util.Random, this generator accepts a long seed but doesn't use all of it. java.util.Random uses 48 bits. The Mersenne Twister instead uses 32 bits (int size). So it's best if your seed does not exceed the int range.
Constructor and Description 

MersenneTwister()
Constructor using the default seed.

MersenneTwister(long seed)
Constructor using a given seed.

Modifier and Type  Method and Description 

static void 
main(java.lang.String[] args)
Tests the code.

protected int 
next(int bits)
Returns an integer with bits bits filled with a random number.

boolean 
nextBoolean()
This method is missing from jdk 1.0.x and below.

byte 
nextByte()
For completeness' sake, though it's not in java.util.Random.

void 
nextBytes(byte[] bytes)
A bug fix for all versions of the JDK.

char 
nextChar()
For completeness' sake, though it's not in java.util.Random.

double 
nextDouble()
A bug fix for versions of JDK 1.1 and below.

float 
nextFloat()
A bug fix for versions of JDK 1.1 and below.

int 
nextInt(int n)
This method is missing from JDK 1.1 and below.

short 
nextShort()
For completeness' sake, though it's not in java.util.Random.

void 
setSeed(long seed)
Initalize the pseudo random number generator.

public MersenneTwister()
public MersenneTwister(long seed)
seed
 generator starting number, often the time of day.public void setSeed(long seed)
setSeed
in class java.util.Random
seed
 from constructorprotected int next(int bits)
next
in class java.util.Random
public boolean nextBoolean()
nextBoolean
in class java.util.Random
public int nextInt(int n)
nextInt
in class java.util.Random
public double nextDouble()
nextDouble
in class java.util.Random
public float nextFloat()
nextFloat
in class java.util.Random
public void nextBytes(byte[] bytes)
nextBytes
in class java.util.Random
public char nextChar()
public short nextShort()
public byte nextByte()
public static void main(java.lang.String[] args)