Java:RandomStringUtils随机种子

Java:RandomStringUtils随机种子,java,random,apache-commons,Java,Random,Apache Commons,我一直在使用RandomStringUtils生成用作数据库键的随机ID: import org.apache.commons.lang.RandomStringUtils; 公共类随机测试{ 公共静态void main(最终字符串[]args){ 对于(int i=0;i实现中没有提供种子,只有一个new Random() random(int count, int start, int end, boolean letters, boolean numbers,

我一直在使用
RandomStringUtils
生成用作数据库键的随机ID:

import org.apache.commons.lang.RandomStringUtils;
公共类随机测试{
公共静态void main(最终字符串[]args){

对于(int i=0;i实现中没有提供种子,只有一个
new Random()

random(int count, int start, int end, 
        boolean letters, boolean numbers, 
        char[] chars, java.util.Random random)

您不应该使用随机生成器生成唯一的密钥。没有任何东西可以保证唯一性。为什么不使用UUID生成器或数据库序列呢


为什么要正确分发密钥?对于主键来说,唯一重要的是它的唯一性。而且种子对分发没有任何影响,好吧。

同意。我必须处理一些遗留约束。这里没有什么可以阻止两次提供相同的id。对于任何想要生成密钥的人来说难以预测的字符串传入。什么是“默认”随机性源?此源是否与其他“随机”实用程序共享?我显式传递的
Random
实例是否被进一步调用
RandomStringUtils.*
?此模块的文档非常糟糕:-(静态
new Random();
在您自己没有传递随机数的情况下使用。所有其他方法似乎最终都会使用答案中的方法,使用静态随机数。如果您传递自己的随机数,则不会存储,因此不会在进一步调用中使用。此包中还有一个“random”实用程序(RandomUtils),它们不会共享代码。
random(int count, int start, int end, 
        boolean letters, boolean numbers, 
        char[] chars, java.util.Random random)