【发布时间】:2014-04-07 05:07:34
【问题描述】:
问题 1:我们能否生成 8 位唯一的 9-1000 万个纯数字字符串?
问题 2:如何在一次程序运行中生成 9 到 1000 万个唯一的“仅限数字”字符串?这些密钥将上传到 db 以供未来 6 个月使用。我试过了
Math.floor(Math.random() * 10000000) + 10000000;
在一个循环中,但会产生很多重复。为了消除重复,我使用了 HashSet,但我在线程“main”java.lang.OutOfMemoryError 中出现异常:集合中 ~140xxxx 大小后的 Java 堆空间。还有其他方法可以生成此输出吗?
【问题讨论】:
-
您的一般方法可能是错误的。为什么不能在 db 中尝试序列?
-
为什么不多几位,那你就可以使用UUID了?少了很多麻烦。
-
@arghtype:通常这是一种有用的方法,但有时重要的是,接收这些数字的人(也许他们是某种 ID)不应该能够从中预测或推断出任何东西.例如,如果我得到 12345678 而你得到 23456789,在某些情况下,最好在我得到我的号码后无法推断出你得到了你的号码。所以随机性可以占有一席之地,前提是它有真正的用例。
-
我不能使用 db 序列,因为这些数字是在接下来的 6 个月内发送给客户的优惠券代码。所以正如克劳德所说,它应该是不可预测的。
-
我发布了我对这个问题的回答,但忘记在此处勾选相应的答案。
标签: java random uniqueidentifier unique-id