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

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

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

随机生成不重复整数源码:

 //  随机生成 n 条 长度为 m 不重复的 整数(常用于主键id)
 //  参数一:指定生成多少条数据     参数二:指定每一条数据的长度[ 例 m=3 --> 678 ]
 public static ArrayList<Long> uniqueId(Integer n, Integer m) {
     //  使用ArrayList集合的原因:便于使用索引操作结果集
     ArrayList<Long> 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<String> uniqueStringId(Integer n, Integer m, String str) {
     //  使用ArrayList集合的原因:便于使用索引操作结果集
     ArrayList<String> 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 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hah杨大仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值