java - 获取随机值而不创建 `Random` 对象

标签 java

我正在编写一个带有小数字段的类构造函数,它需要由一个随机值初始化。只有一个小字段,我需要创建新的 Random 对象。首先它看起来很麻烦,其次可能会出现很多相等的值,以防在一个时间片内创建很多对象(new Random() 等同于 new Random(System.currentTimeMillis()),相等的 timeMillis 需要相等的随机值。

避免这种情况的最佳方法是什么?

最佳答案

new Random() is euqal to new Random(System.currentTimeMillis())

不,不是。在最近的 JDK 中,它是 new Random(seedUniquifier() ^ System.nanoTime()); 其中 seedUniquifier() 基于在静态 AtomicLong 上运行线性同余生成器。所以根据需要创建 Random 对象实际上是完全安全的。

当然,您始终可以拥有一个private static Random 字段并在构造函数中使用它。

关于java - 获取随机值而不创建 `Random` 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10113380/

相关文章:

java - 如何使用 Micronaut 客户端注释映射 errorType

Java:使用 System.nanoTime() 排序函数执行时间过长

java - 从 Iterable<?> 转换为 Iterable<Object> 总是安全的吗?

java - 如何提高 Java 语言中 ComponentColorModel 创建的 BufferedImage 的绘制性能?

java - 如何在 Android 滑动标签中使用 ListFragment?

java - 如何在另一个 GWT 应用程序中重用实体、DTO 和客户端服务接口(interface)

java - 如何断言数据库连接在事务中?

java - 如何在Spring Data JPA中使用CriteriaUpdate执行更新操作?

java - 为什么我们需要创建数据库,而我们可以使用 Hibernate 生成它们?

java - “R”在默认包中 android 错误