在我工作的项目中,我需要生成 n 个随机 double
数字(取决于输入文件的内容)或将它们转换为 double
如果我的输入文件中有它们。这些数字在逗号后应该只有 2 位小数(例如:0.98
)。
我知道在 Java 8 中,有两种方法可以做到这一点:
- Java 8 方式:
nthNumber = Double.parseDouble(new DecimalFormat("#.##").format(ThreadLocalRandom.current().nextDouble(0,1)).replace(",","."));
- 老办法:
nthNumber = Double.parseDouble(new DecimalFormat("#.##").format(new Random().nextDouble()).replace(",", ".")) ;
渐近来说,哪个最快?根据我对 A.D.S. 的了解,我会说这将是同一时间 (O(n)
?) 但我不是 100% 确定
除了这两种方法之外,是否还有其他方法可以在 0
和 1
之间生成随机 double
,渐近地讲,这些方法更快,比我的建议? (更确切地说,是否有方法可以在 O(n)
或 O(1)
中完成所有事情?)
提前感谢所有愿意花一分钟时间回答我这个问题的人
最佳答案
您的两种方法都使用字符串作为中间表示,这将非常低效(内存分配、字符串解析、字符串格式化都是相对较慢的操作。您可能还想避免分配多个 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;
}
关于java - 在java中生成随机双数的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39470238/