我创建了一个从0到9999的计数器,直到它再次重置。我使用此计数器的输出作为值来进行唯一输入。但是,应用程序需要在每次重新启动应用程序时找到其最后创建的编号。因此,我正在寻找一种避免任何类型的对象存储并且仅依赖于随机数生成的方法。
就像是:
int randomTimeBasedGenerator() {
Random r = new Random(System.currentTimeMillis())
int num = r.nextInt() % 9999
return num
}
但是,我有什么保证,这种方法会生成唯一的数字?如果没有,它会保持多长时间?对于这种情况,我可以研究哪些研究论文?
对于我的情况,随机数生成将是一个优雅的解决方案,如果我至少可以保证它不会在几周或几个月内重复。但是,如果不存在这样的保证,随机数生成在我的情况下将是无用的。
您无法保证随机数生成器的返回值保持唯一。随机数生成器生成唯一的数字序列,而不是唯一的数字。随机数总是会迟早重演。
正如@Thilo所建议的那样,UUID是唯一的数字。但是在你的情况下更好的方法可能是设置一个轻量级数据库(sqlite会这样做)并将记录添加到具有增量id的表中。如果不在某处存储值,就无法跟踪进程。