JavaのRandomクラスの詳細

3510 ワード

Randomクラスは、2つのコンストラクタを持つ擬似乱数を生成するために使用されます.1つのコンストラクタはデフォルトのシード(現在の時間をシード)を使用し、もう1つのコンストラクタは、long型整数を入力したシードをプログラマに表示する必要があります.
RandomクラスはMathクラスのrandom()メソッドよりも多くの方法で様々な擬似乱数を生成し、浮動小数点タイプの擬似乱数を生成したり、整数タイプの擬似乱数を生成したり、乱数を生成する範囲を指定したりすることができます.Randomクラスの一般的な使い方は次の例です.
public class Test {
    public static void main(String[] args) {
        Random rand = new Random();
        System.out.println("rand.nextBoolean():" + rand.nextBoolean());
        //   0.0-1.0      double 
        System.out.println("rand.nextDouble():" + rand.nextDouble());
        //   0.0-1.0      float 
        System.out.println("rand.nextFloat():" + rand.nextFloat());
        //       int           
        System.out.println("rand.nextInt():" + rand.nextInt());
        //   0-20        
        System.out.println("rand.nextInt(20):" + rand.nextInt(20));
        //       long           
        System.out.println("rand.nextLong():" + rand.nextLong());
    }
}

実行結果:
rand.nextBoolean():false
rand.nextDouble():0.642852533214433
rand.nextFloat():0.2703439
rand.nextInt():1773302756
rand.nextInt(20):3
rand.nextLong():1175156863283867437

上記のプログラムから,Randomは擬似乱数を生成するために多くの選択肢を提供できることが分かる.
Randomは48ビットのシードを使用し、このクラスの2つのインスタンスが同じシードで作成され、メソッドが同じ順序で調整されると、同じ数値シーケンスが生成されます.つまり,Randomが生成した数字は真のランダムではなく,擬似ランダムである.
2つのRandomオブジェクトが同じ数値シーケンスを生成しないようにするには、通常、次のコードに示すように、現在の時間をRandomオブジェクトのシードとして使用することを推奨します.
Random rand = new Random(System.currentTimeMillis());
同時アクセス環境では、Randomの代わりにThreadLocalRandomを使用することで、マルチスレッドリソースの競合を低減し、最終的にシステムのスレッドセキュリティを向上させることができます.ThreadLocalRandomの使用法はRandomと基本的に似ており、ThreadLocalRandomオブジェクトを取得するための静的current()メソッドを提供し、そのオブジェクトを取得した後、様々なnextXxx()メソッドを呼び出して擬似乱数を取得することができる.次のコードは、ThreadLocalRandomの使用方法を示しています.
ThreadLocalRandom rand = ThreadLocalRandom.current();
//    5-20      
int r1 = rand.nextInt(5,20);        
//    5.0-20.0        
double r2 = rand.nextDouble(5.0, 20.0);

 
転載先:https://www.cnblogs.com/bingyimeiling/p/10645803.html