StringBuffer stringBuffer = new StringBuffer();
Random rd = new Random();
while (stringBuffer.length() != 20) {
int value = rd.nextInt(99999);
String temp = Integer.toHexString(value);
if (temp.length() == 5) {
stringBuffer.append(temp);

}
return stringBuffer.toString().toUpperCase();每次生成一个5位的随机数,累加4次得到这个字符串.这种算法达到千万级数据量时得到的字符串会重复吗?

解决方案 »

  1.   

    这种方法 你就算只生成两个字符串 也不能完全保证它们就不重复啊
    要不怎么能叫随机呢?
    千万级数据量 看样子你还不想让他们有一定的规律
    那就搞个set<String> 往里填 这样就是数据量越大运算越慢
      

  2.   

    UUID uuid = UUID.randomUUID(); 
    这个是不会重复的
      

  3.   

    嗯,使用 UUID回复内容太短了!
    回复内容太短了!
    回复内容太短了!
      

  4.   

    UUID理论上是不会重复的。
    我一般生成主键,采用将主键分为两个部分。
    高位部分,把时间格式化成数字(精确到毫秒,毫秒占3位,不足3位要前置补0占位);
    低位部分,由3位数字组成,不足3位时,要前置补0占位。
    每次生成主键时,先将低位部分加一,若低位部分未超过3位时,与高位部分进行连接即可;
    若低位部分已经超过三位,则重新生成高位数字,低位置1,高低部分连接(注意补0占位)。例如:
    高位:20100303180555012
    低位:001
    生成主键为:20100303180555012001二十位的主键,印象中长整型的数据正好可以放下。如果是多个应用程序操纵同一张表,可以将高位部分保存到一个表中,供生成主键使用。
    一千条记录访问一次数据库。如果应用程序支持存储过程就用存储过程生成高位的数字。
      

  5.   

    我以前的一个同事,说他使用UUID的过程中,4年出现了一次主键重复的情况。
    这我就不知道是怎么回事了,呵呵。
    我虽然没用过UUID,但是,还是坚信,UUID是不会重复的。
      

  6.   

    产生的主键重复可能是其使用的是数据库自带的 UUID 算法。如果使用编程语言的 UUID 算法,重复的概率会小很多。
      

  7.   

    UUID啊...
    不然还是有几率的