Wegen des Casts in der Zufallszahlenberechnungsroutine meines randomisierten Rabin-Karp-Algorithmus wollte ich einmal die Geschwindigkeit verschiedener Varienten austesten.
Nachfolgend die Ergebnisse für 100 Millionen Zufallszahlen von 0 bis 10000:
Variante 1 mit Math.random() mit int-Cast:
10465 ms Zeit benötigt für Zufallszahlenerzeugung.
Variante 2 mit Random.nextInt(Obergrenze - 1):
8737 ms Zeit benötigt für Zufallszahlenerzeugung.
Da aber nicht viele q-Wechsel stattfinden ist das praktisch irrelevant.
import java.io.File;
import java.io.IOException;
import java.util.Random;
public class zufallszahlen {
/*-----------------------------------------------------------------------------
* Zufallszahlen erzeugen mit Unter- und Obergrenze
*-----------------------------------------------------------------------------*/
public static int myRandomWithHigh(int low, int high)
{
high++;
return (int) (Math.random() * (high - low) + low);
}
public static void main(String[] args)
{
/* Variante 1 für Zufallszahlenerzeugung */
long completeTimeBefore = System.currentTimeMillis();
for (int i=1;i<=100000000;i++)
{
myRandomWithHigh(0,10000);
}
long completeTimeAfter = System.currentTimeMillis();
long completeTimeDiff = completeTimeAfter - completeTimeBefore;
System.out.println(completeTimeDiff + " ms Zeit benötigt für Zufallszahlenerzeugung.\n");
/* Variante 2 für Zufallszahlenerzeugung */
Random test = new Random();
completeTimeBefore = System.currentTimeMillis();
for (int i=1;i<=100000000;i++)
{
test.nextInt(10001);
}
completeTimeAfter = System.currentTimeMillis();
completeTimeDiff = completeTimeAfter - completeTimeBefore;
System.out.println(completeTimeDiff + " ms Zeit benötigt für Zufallszahlenerzeugung.\n");
}
}