随机生成不重复整数源码:我们在日常练习、或实际应用中经常会用到唯一的值来为我们的数据做标记,当体量变得非常大时,就需要对数据做一些处理以达到我们的需求。
本文编写了一份随机生成 n条 m位 不重复的 整数 作为 用户id 工具类 以便大家使用:
// 随机生成 n 条 长度为 m 不重复的 整数(常用于主键id) // 参数一:指定生成多少条数据 参数二:指定每一条数据的长度[ 例 m=3 --> 678 ] public static ArrayListuniqueId(Integer n, Integer m) { // 使用ArrayList集合的原因:便于使用索引 *** 作结果集 ArrayList check = new ArrayList<>(n); while (true) { if (check.size() == n) { break; // 当集合长度达到指定长度时,打破循环 } String id_string = ""; // 预定义字符串准备拼接 for (int j = 0; j < m; j++) { if (j == 0) { // 保证第一位不为0 id_string += (long) (Math.random() * 9 + 1) + ""; } else { // 随机生成0~9 、拼接 id_string += (long) (Math.random() * 10) + ""; } } long uid = Long.parseLong(id_string); // 转为long类型,int类型可能会超出最大值异常 boolean flag = true; // 定义一面旗帜做为检验是否重复值标记 for (Long c : check) { if (c == uid) { // 遍历判断,若有重复值,则flag=false,并打破循环 flag = false; break; } } if (flag) { // 若flag为true,则证明没有重复值 check.add(uid); // 将uid加入集合 } } return check; // 返回生成的集合 }
有朋友可能会问:为什么不利用 set集合 的特性而做这么多判断将数据存于 ArrayList集合 中呢?
原因是将数据存在 ArrayList集合 中我们便于 根据 索引 取值:
测试效果如图:
随机生成不重复字符串源码:
// 随机生成 n 条 长度为 m 不重复的 整数(常用于主键id) // 参数一:指定生成多少条数据 参数二:指定每一条数据的长度[ 例 m=3 --> 678 ] 参数三:默认拼接在头部,可根据需求修改源码 public static ArrayListuniqueStringId(Integer n, Integer m, String str) { // 使用ArrayList集合的原因:便于使用索引 *** 作结果集 ArrayList check = new ArrayList<>(n); while (true) { if (check.size() == n) { break; // 当集合长度达到指定长度时,打破循环 } String id_string = str; // 预定义字符串准备拼接 for (int j = 0; j < m; j++) { // 随机生成0~9 、拼接 id_string += (long) (Math.random() * 10) + ""; } boolean flag = true; // 定义一面旗帜做为检验是否重复值标记 for (String c : check) { if (c.equals(id_string)) { // 遍历判断,若有重复值,则flag=false,并打破循环 flag = false; break; } } if (flag) { // 若flag为true,则证明没有重复值 check.add(id_string); // 将uid加入集合 } } return check; // 返回生成的集合 }
测试效果图:
对随机数不太熟悉的朋友请参考:Math.random()随机数 使用详解【一看就懂】_杨大仙爱篮球-CSDN博客_java随机数math.random怎么用
搭配使用场景:
JAVA高效率 (秒级) 将千万条数据导入数据库 (已封装工具类)【详解】【一看就懂】_杨大仙爱篮球-CSDN博客
如有错误,欢迎指正
Thanks
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)