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

标签 java algorithm time

在我工作的项目中,我需要生成 n 个随机 double 数字(取决于输入文件的内容)或将它们转换为 double 如果我的输入文件中有它们。这些数字在逗号后应该只有 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(",", ".")) ;

渐近来说,哪个最快?根据我对 A.D.S. 的了解,我会说这将是同一时间 (O(n)?) 但我不是 100% 确定

除了这两种方法之外,是否还有其他方法可以在 01 之间生成随机 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/

相关文章:

php - Levenshtein - 分组酒店名称

将数组中实现的堆转换为树

c++ - 如果我的钱有限,如何在 DAG 中找到最便宜的方式?

android - 如何防止用户设置早于当前日期和时间的日期和时间

JavaFX:向表添加行

java - 在 Play Framework 中通过 GET 请求发送日期参数的理想方式是什么?

java - 让代码在无效输入后重新启动 (Java)

java - JavaFX 默认在哪里创建 FXML 文件?

delphi - 我可以假设 Delphi NOW 函数是线程安全的吗?

c - C程序中的函数调用函数