简单生成随机数id的方法

近期项目中需要生成不同的id,之前都是使用UUID来实现的,现在需求是只要8位数的,也就是说用户量是有限的,暂时是不需要太多的,所以就简单的使用Set实现了这一功能。

 1 /**
 2  * 生成8位不重复随机id
 3  * @author xiaoquan
 4  * @created 2015年10月24日 下午4:13:57
 5  */
 6 public class RandomUtils {
 7         private static Set<String> set = new HashSet<String>();
 8 //    private static List<String> list = new ArrayList<String>();
 9 
10     /**
11      * 数据库重启时,需要将id缓存在内存set中
12      * @param list
13      */
14     public static void initSet(List<String> list){
15         for(String str : list){
16             set.add(str);
17         }
18     }
19     
20     /**
21      * 随机获取八位不同的Id
22      * @return
23      */
24     public static synchronized String generateSetRandom(){
25         String r = null;
26         boolean success = true;
27         do{
28            r = RandomStringUtils.randomNumeric(8);
29            success = set.add(r);
30         }while(!success);//避免重复,false循环随机获取
31         return r;
32     }
33 }

 上面代码中,注释掉List是因为我发现使用list存储的话,其生成性能有着非常大的差别,感兴趣的童鞋可以测试下。

 

如果不限制位数的话,我觉得有一种生成随机数比较好的方式大可以试下:

1 public static synchronized String generateRandom(){
2         //使用当前时间生成时间戳yyyyMMddHHmmssSSS
3         StringBuffer suf = new StringBuffer(DateFormatUtils.format(Calendar.getInstance(), "yyyyMMddHHmmssSSS"));
4         //生成3位随机数
5         suf.append(RandomStringUtils.randomNumeric(3));
6         return suf.toString();
7 }

使用这段代码生成的随机数可以保证唯一,也是一种比较好的方式,可以调整randomNumeric(n)中n的大小来减小相同的概率

 

posted @ 2015-10-25 18:11  xiao_quan  阅读(1741)  评论(0编辑  收藏  举报