随时间推移保证唯一性的随机数生成

Random number generation guaranteeing uniqueness over time

我创建了一个从 0 到 9999 的计数器,直到它再次重置。我使用这个计数器的输出作为一个值来创建唯一的条目。但是,每次重新启动应用程序时,应用程序都需要找到其最后创建的编号。因此,我正在寻找一种避免任何类型的对象存储并仅依赖于随机数生成的方法。

类似于:

int randomTimeBasedGenerator() {
    Random r = new Random(System.currentTimeMillis())
    int num = r.nextInt() % 9999
    return num
}

但是我有什么保证这个方法生成唯一的数字?而且,如果不是,它会保持独特多久?对于这种情况,我可以查看任何研究论文吗?

对于我的情况,随机数生成将是一个很好的解决方案,如果我至少可以保证它不会在几周或几个月内重复出现的话。但是如果不存在这样的保证,随机数生成对我来说将毫无用处。

您无法保证随机数生成器的 return 值保持唯一。随机数生成器生成 唯一的数字序列,而不是唯一的数字。随机数迟早会总是 重复自己。

正如@Thilo 所建议的,UUID 是唯一的数字。但在您的情况下,更好的方法可能是设置一个轻量级数据库(sqlite 会做)并使用增量 id 将记录添加到 table。如果不在某处存储值,就不可能跟踪进程。