在java中生成随机双数的最快方法

Gia*_* F. 2 java algorithm time

在我正在工作的项目中,我需要生成n个随机double数(取决于输入文件的内容)或者doubles如果我从输入文件中将它们转换为它们.逗号后面的这些数字应该只有2位小数(例如:)0.98.

我知道在Java 8中,有两种方法可以做到这一点:

  1. Java 8方式: nthNumber = Double.parseDouble(new DecimalFormat("#.##").format(ThreadLocalRandom.current().nextDouble(0,1)).replace(",","."));
  2. 旧时尚方式: nthNumber = Double.parseDouble(new DecimalFormat("#.##").format(new Random().nextDouble()).replace(",", "."));

渐渐地说,哪个是最快的?根据我对ADS的不了解,我会说它会是同一时间(O(n)?),但我并不是百分百肯定

除了这两种方式外,还有什么其他的方法来生成随机doubles之间0以及1它们更快,渐进地说,比我的建议?(相反,是否有方法可以做任何事情O(n)O(1)?)

提前感谢所有花一分钟回答我这个问题的人

Ste*_*ein 8

你的两种方法都使用字符串作为中间表示,这将是非常低效的(内存分配,字符串解析,字符串格式化都是相对较慢的操作.你可能还想避免分配多个Random实例.

鉴于您只需要两个十进制数字,为什么不创建0..99范围内的整数并将其除以100.0?

Random random = new Random();  // Only one instance needed.
for (int n = 0; n < total; n++) {
   double nthRandomNumber = random.nextInt(100) / 100.0;
}
Run Code Online (Sandbox Code Playgroud)