java.util
クラス Random

java.lang.Object
  |
  +--java.util.Random

public class Random
extends Object

Random クラスのインスタンスは、一連の擬似乱数を生成します。クラスでは 48 ビットのシードを使い、このシードは線形合同法で変更されます。詳細は Donald Knuth 著『The Art of Computer Programming, Volume 2』の 3.2.1 を参照してください。

2 つの Random インスタンスが同じシードで生成され、それぞれに対して同じメソッド呼び出しのシーケンスが生成される場合は、同じ番号のシーケンスが生成され返されます。このプロパティを保証するために、固有のアルゴリズムが Random クラスに指定されます。Java コードの絶対的な移植性の保持のために、Java の実装はここに示されている Random クラスのアルゴリズムをすべて使用する必要があります。ただし、Random クラスのサブクラスは、すべてのメソッドの一般規約に準拠したものであればほかのアルゴリズムも使用できます。

Random クラスによって実装されるアルゴリズムでは、各呼び出しで擬似乱数的に生成された最大 32 ビットを提供できる protected ユーティリティメソッドが使用されます。

導入されたバージョン:
JDK1.0

コンストラクタの概要
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
 

コンストラクタの詳細

Random

public Random()
新しい乱数ジェネレータを作成します。シードは現在時刻をもとに初期化されます。
 public Random() { this(System.currentTimeMillis()); }
関連項目:
System.currentTimeMillis()

Random

public Random(long seed)
long 型のシードを使って乱数ジェネレータを作成します。
 public Random(long seed) { setSeed(seed); }
擬似乱数ジェネレータの状態を保持するために next メソッドによって使用されます。
パラメータ:
seed - 初期シード
関連項目:
setSeed(long)
メソッドの詳細

setSeed

public void setSeed(long seed)
単一の long 型のシードを使って、乱数ジェネレータのシードを設定します。setSeed の一般規約では、シードとして引数 seed を使って作成されたばかりの状態と同じになるように、この乱数ジェネレータオブジェクトの状態を変更します。setSeed メソッドは Random クラスによって次のように実装されます。
 synchronized public void setSeed(long seed) {
       this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
 }
Random クラスによる setSeed の実装は、指定されたシードの 48 ビットだけを使用していますが、一般には、メソッドは変更することにより、シード値として long 引数の 64 ビットすべてを使用することもできます。
パラメータ:
seed - 初期シード

next

protected int next(int bits)
次の擬似乱数を生成します。このメソッドは、ほかのすべてのメソッドによって使われるので、サブクラスによって上書きされます。

next の一般規約では、int 型の値を返し、引数 bits が 132 (1 と 32 を含む) の範囲の場合は、戻り値の多くの下位ビットが (ほぼ) 独立に選択されたビット値になり、それぞれの値は (ほぼ) 均等に 0 または 1 になります。next メソッドは Random クラスによって次のように実装されます。

 synchronized protected int next(int bits) {
       seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
       return (int)(seed >>> (48 - bits));
 }
これは、D. H. Lehmer によって定義された、線形合同擬似乱数ジェネレータです。詳細は Donald Knuth 著『The Art of Computer Programming, Volume 2: Seminumerical Algorithms』の 3.2.1 を参照してください。
パラメータ:
bits - ランダムビット
戻り値:
乱数ジェネレータのシーケンスを使って生成された、次の擬似乱数
導入されたバージョン:
JDK1.1

nextInt

public int nextInt()
乱数ジェネレータのシーケンスを使って、一様分布の int 型の擬似乱数を返します。nextInt の一般規約では、1 つの int 型の値が擬似乱数として生成されて返されます。232 の可能なすべての int 値が (ほぼ) 均等な確率で生成されます。nextInt メソッドは Random クラスによって次のように実装されます。
 public int nextInt() {  return next(32); }
戻り値:
乱数ジェネレータのシーケンスを使って生成された等分布の int 型擬似乱数

nextLong

public long nextLong()
乱数ジェネレータのシーケンスを使って、一様分布の long 型の次の擬似乱数を返します。nextLong の一般規約では、1 つの long 型の値が擬似乱数として生成されて返されます。264 の可能なすべての long 値が (ほぼ) 均等な確率で生成されます。nextLong メソッドは Random クラスによって次のように実装されます。
 public long nextLong() {
       return ((long)next(32) << 32) + next(32);
 }
戻り値:
乱数ジェネレータのシーケンスを使って生成された、一様分布の long 型の次の擬似乱数