栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

『大厂必备』随机生成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 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571300.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号