Java 乱数生成:Random クラスと Math.random 実践ガイド
この簡潔なチュートリアルでは、Java で乱数値を生成する2つの最も一般的なアプローチ、java.util.Random と Math.random() を学びます。両方とも JDK の一部ですが、それぞれわずかに異なるユースケースに適し、独自の機能を提供します。
- java.util.Random – あらゆるプリミティブ型の数値を生成可能。再現性のためにシード指定可。
- Math.random() – オブジェクト作成なしで [0.0, 1.0) の範囲の double を素早く取得可能。
java.util.Random での乱数生成
Random クラスは int、long、float、double、boolean 値を生成できます。一度インスタンス化して同じオブジェクトを再利用すると、パフォーマンスオーバーヘッドを回避できます。
以下は 0〜99(含む)の乱数整数を10個出力する完全な例です。上限を込みにする場合は引数に1を加えます。
import java.util.Random;
public class RandomNumbers {
public static void main(String[] args) {
Random rng = new Random();
for (int i = 0; i < 10; i++) {
int randomNumber = rng.nextInt(100); // 0-99
System.out.println("Random No: " + randomNumber);
}
}
}
典型的な出力:
Random No: 17 Random No: 57 Random No: 73 Random No: 48 Random No: 68 Random No: 86 Random No: 34 Random No: 97 Random No: 73 Random No: 18
Random はほとんどの用途でスレッドセーフなため、必要なら同じインスタンスを複数スレッドで共有できます。再現可能なシーケンスが必要ならシードを渡します:new Random(42)。
Math.random() での乱数生成
[0.0, 1.0) の double がすぐに必要な場合、Math.random() が便利です。内部的には単一の Random インスタンスに委譲するため、小規模ワークロードでは効率的です。
例:double 値を10個生成。
public class DemoRandom {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(Math.random());
}
}
}
典型的な出力:
0.46518450373334297 0.14859851177803485 0.5628391820492477 0.6323378498048606 0.1740198445692248 0.9140544122258946 0.9167350036262347 0.49251219841030147 0.7426056725722353
異なる範囲の整数や double を得るには、Math.random() に算術を組み合わせます。例えば 1〜10(含む)のランダム整数:(int)(Math.random() * 10) + 1。
重要ポイント
- 多様なプリミティブ型や、シードによる決定論的シーケンスが必要なら
java.util.Random - [0.0, 1.0) 区間の double を手早く取得するなら
Math.random() - 同じ
Randomインスタンスを再利用し、繰り返しシードのオーバーヘッドを回避 - 並行環境でのスレッドセーフ・高性能な乱数には
ThreadLocalRandom(Java 7+)を検討
Java
- Microsoft AzureへのJava EEアプリケーションデプロイ:ステップバイステップガイド
- Java Listインターフェース完全ガイド:実装クラスと主要メソッド
- Java TreeMap完全マスター:実例で学ぶソート済みマップ
- Javaコレクションアルゴリズム完全ガイド:ソート、シャッフル、検索など
- Javaオブジェクト配列の作成:ステップバイステップガイド
- Java String.length()メソッド:文字列サイズ取得の実例解説
- Java String.compareTo()マスター:構文、ユースケース、実践例
- Java BufferedReader でファイル読み込み:実践ガイドと例
- JavaでcharをStringに変換する方法:実践例とベストプラクティス
- Javaで再帰を使って文字列を反転させる方法
- Java 8ストリームAPI:宣言的データ処理の新しいアプローチ