Java Random Sınıfı: Sözde Rastgele Sayı Üretimi Rehberi
🧠 Bu Rehberde Ne Öğreneceksiniz?
Bu rehberde, Java’nın java.util.Random sınıfını kullanarak farklı türlerde (int, double, boolean) sözde rastgele sayılar üretmeyi öğreneceksiniz.
Seed (çekirdek) değerinin rastgelelik üzerindeki etkisini, çok iş parçacıklı ortamlarda hangi sınıfların tercih edilmesi gerektiğini ve Java 8 ile gelen akış (Stream) metotlarını adım adım inceleyeceğiz.
🎲 1. Random Sınıfı Nedir?
java.util.Random, belirli bir algoritma kullanarak sözde rastgele (pseudorandom) sayılar üretir.
Bu sayılar gerçek rastgelelikten farklı olarak, aynı seed (tohum) değeriyle tekrar üretilebilir.
Özellikleri:
- Varsayılan olarak sistemin nano zamanı seed olarak kullanılır.
- Aynı seed ile başlatılan iki Random örneği aynı sayı dizisini üretir.
- Güvenli değildir, bu yüzden şifreleme veya oturum anahtarlarında kullanılmamalıdır.
- Çoklu iş parçacığında
ThreadLocalRandom, güvenlik içinSecureRandomönerilir.
⚙️ 2. Random Sınıfı Kurucuları
| Kurucu | Açıklama |
|---|---|
Random() | Varsayılan bir seed değeriyle rastgele sayı üretir. |
Random(long seed) | Belirtilen seed değeriyle deterministik (tekrarlanabilir) rastgele sayılar üretir. |
🔢 3. Sık Kullanılan Random Metotları
| Metot | Dönen Değer | Açıklama |
|---|---|---|
nextBoolean() | boolean | Rastgele true/false üretir. |
nextDouble() | double | 0.0 ile 1.0 arasında rastgele double döner. |
nextFloat() | float | 0.0 ile 1.0 arasında float değer döner. |
nextInt() | int | Rastgele bir tam sayı üretir. |
nextInt(int n) | int | 0 (dahil) ile n (hariç) arasında bir tam sayı döndürür. |
💻 4. Temel Kullanım Örneği
Aşağıdaki örnek, Random sınıfının en yaygın metotlarını gösterir:
import java.util.Random;
public class RandomNumberExample {
public static void main(String[] args) {
Random rastgele = new Random();
System.out.println(rastgele.nextBoolean());
System.out.println(rastgele.nextDouble());
System.out.println(rastgele.nextInt());
System.out.println(rastgele.nextInt(20));
}
}
💡 Açıklama: Her çalıştırmada farklı sonuçlar üretilir çünkü varsayılan seed sistem zamanına göre değişir.
🌱 5. Seed (Çekirdek) Kullanımı
Seed değeri, algoritmanın başlangıç noktasını belirler. Aynı seed değeriyle başlatılan iki Random nesnesi aynı diziyi üretir:
import java.util.Random;
public class RandomSeedExample {
public static void main(String[] args) {
Random r1 = new Random(500);
Random r2 = new Random(500);
System.out.println(r1.nextInt());
System.out.println(r2.nextInt());
}
}
💬 Çıktı:
-1193959466
-1193959466
Aynı çekirdek → aynı sonuçlar ✅
⚡ 6. Java 8 ile Akış (Stream) Tabanlı Rastgelelik
Java 8, Random sınıfına akış desteği ekledi. Bu sayede belirli bir aralıkta çoklu rastgele değerler üretilebilir:
import java.util.Random;
import java.util.stream.IntStream;
public class RandomStreamExample {
public static void main(String[] args) {
Random rastgele = new Random();
IntStream sayilar = rastgele.ints(5, 1, 100);
sayilar.forEach(System.out::println);
}
}
💡 Açıklama: Bu kod 1 ile 100 arasında 5 adet rastgele tam sayı üretir.
🧭 7. Alternatifler
| Sınıf | Kullanım Amacı |
|---|---|
ThreadLocalRandom | Çok iş parçacıklı uygulamalarda yüksek performans sağlar. |
SecureRandom | Şifreleme ve güvenlik odaklı rastgelelik üretimi için önerilir. |
💡 Sıkça Sorulan Sorular (SSS)
- “Sözde rastgele” ne demek?
Sayılar algoritmik olarak üretilir; aynı seed değeriyle aynı sonuç alınabilir.
- Çekirdek (seed) neden önemli?
Seed, üretilen dizinin başlangıç noktasını belirler. Simülasyonlarda tekrarlanabilir sonuçlar sağlar.
- nextInt(10) ne üretir?
0–9 aralığında bir değer döndürür (üst sınır dahil değildir).
- Random güvenli mi?
Hayır, kriptografik amaçlar için SecureRandom kullanılmalıdır.
- Thread-safe midir?
Tam olarak değil. Çoklu thread yapılarında ThreadLocalRandom tercih edilir.
🚀 Sonuç
java.util.Random, Java’da basit rastgele sayı üretimi için temel araçtır. Ancak doğru kullanıldığında faydalıdır; yanlış kullanıldığında tekrarlanabilir sonuçlar verebilir.
Geliştirmelerinizde Random, ThreadLocalRandom veya SecureRandom arasındaki farkı doğru değerlendirerek en uygun çözümü seçin. Bu örnekleri Rabisu Bulut platformunda oluşturacağınız sanal sunucularda (instance) deneyebilir ve performans farklarını gözlemleyebilirsiniz.