『大厂必备』随机生成n条m位不重复的整数(字符串)作为用户id【工具类】超好用

『大厂必备』随机生成n条m位不重复的整数(字符串)作为用户id【工具类】超好用,第1张

『大厂必备』随机生成n条m位不重复的整数(字符串)作为用户id【工具类】超好用

        我们在日常练习、或实际应用中经常会用到唯一的值来为我们的数据做标记,当体量变得非常大时,就需要对数据做一些处理以达到我们的需求。

        本文编写了一份随机生成 n条 m位 不重复的 整数 作为 用户id 工具类 以便大家使用:

随机生成不重复整数源码:
 //  随机生成 n 条 长度为 m 不重复的 整数(常用于主键id)
 //  参数一:指定生成多少条数据     参数二:指定每一条数据的长度[ 例 m=3 --> 678 ]
 public static ArrayList uniqueId(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 ArrayList uniqueStringId(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 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5562545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存