简单生成随机数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的大小来减小相同的概率