java.lang.Object | +--java.util.Random
Random クラスのインスタンスは、一連の擬似乱数を生成します。クラスでは 48 ビットのシードを使い、このシードは線形合同法で変更されます。詳細は Donald Knuth 著『The Art of Computer Programming, Volume 2』の 3.2.1 を参照してください。
2 つの Random
インスタンスが同じシードで生成され、それぞれに対して同じメソッド呼び出しのシーケンスが生成される場合は、同じ番号のシーケンスが生成され返されます。このプロパティを保証するために、固有のアルゴリズムが Random クラスに指定されます。Java コードの絶対的な移植性の保持のために、Java の実装はここに示されている Random クラスのアルゴリズムをすべて使用する必要があります。ただし、Random クラスのサブクラスは、すべてのメソッドの一般規約に準拠したものであればほかのアルゴリズムも使用できます。
Random クラスによって実装されるアルゴリズムでは、各呼び出しで擬似乱数的に生成された最大 32 ビットを提供できる protected ユーティリティメソッドが使用されます。
コンストラクタの概要 | |
Random()
新しい乱数ジェネレータを作成します。 |
|
Random(long seed)
long 型のシードを使って乱数ジェネレータを作成します。
|
メソッドの概要 | |
protected int |
next(int bits)
次の擬似乱数を生成します。 |
int |
nextInt()
乱数ジェネレータのシーケンスを使って、一様分布の int 型の擬似乱数を返します。 |
long |
nextLong()
乱数ジェネレータのシーケンスを使って、一様分布の long 型の次の擬似乱数を返します。 |
void |
setSeed(long seed)
単一の long 型のシードを使って、乱数ジェネレータのシードを設定します。 |
クラス java.lang.Object から継承したメソッド |
equals,
getClass,
hashCode,
notify,
notifyAll,
toString,
wait,
wait,
wait |
コンストラクタの詳細 |
public Random()
public Random() { this(System.currentTimeMillis()); }
System.currentTimeMillis()
public Random(long seed)
long
型のシードを使って乱数ジェネレータを作成します。
擬似乱数ジェネレータの状態を保持するために next メソッドによって使用されます。public Random(long seed) { setSeed(seed); }
seed
- 初期シードsetSeed(long)
メソッドの詳細 |
public void setSeed(long seed)
long
型のシードを使って、乱数ジェネレータのシードを設定します。setSeed の一般規約では、シードとして引数 seed を使って作成されたばかりの状態と同じになるように、この乱数ジェネレータオブジェクトの状態を変更します。setSeed メソッドは Random クラスによって次のように実装されます。
Random クラスによる setSeed の実装は、指定されたシードの 48 ビットだけを使用していますが、一般には、メソッドは変更することにより、シード値として long 引数の 64 ビットすべてを使用することもできます。synchronized public void setSeed(long seed) { this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1); }
seed
- 初期シードprotected int next(int bits)
next の一般規約では、int 型の値を返し、引数 bits が 1 〜 32 (1 と 32 を含む) の範囲の場合は、戻り値の多くの下位ビットが (ほぼ) 独立に選択されたビット値になり、それぞれの値は (ほぼ) 均等に 0 または 1 になります。next メソッドは Random クラスによって次のように実装されます。
これは、D. H. Lehmer によって定義された、線形合同擬似乱数ジェネレータです。詳細は Donald Knuth 著『The Art of Computer Programming, Volume 2: Seminumerical Algorithms』の 3.2.1 を参照してください。synchronized protected int next(int bits) { seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1); return (int)(seed >>> (48 - bits)); }
bits
- ランダムビットpublic int nextInt()
int
型の擬似乱数を返します。nextInt の一般規約では、1 つの int 型の値が擬似乱数として生成されて返されます。232 の可能なすべての int 値が (ほぼ) 均等な確率で生成されます。nextInt メソッドは Random クラスによって次のように実装されます。
public int nextInt() { return next(32); }
int
型擬似乱数public long nextLong()
long
型の次の擬似乱数を返します。nextLong の一般規約では、1 つの long 型の値が擬似乱数として生成されて返されます。264 の可能なすべての long 値が (ほぼ) 均等な確率で生成されます。nextLong メソッドは Random クラスによって次のように実装されます。
public long nextLong() { return ((long)next(32) << 32) + next(32); }
long
型の次の擬似乱数