使用随机算法产生一个数,要求把1-1000W之间这些数全部生成。(考察高效率,解决产生冲突的问题)

【记录学习笔记,方便自己理解。 】

参考博客:https://blog.csdn.net/fanbih/article/details/54913787

以100为例,1000W时将value值更改即可,选取1-100范围方便时输出检验是否正确。

先构建一个value大小的数组,按下标存储1-value范围的值。

有了这样一个数组之后,用random.nextInt(value) 每次随机生成[0,value)范围的值,用count+value 作为下标交换count+value 和count位置的两个数,比如交换 list[0+5] 和list[0]。 下一次count++,交换某个位置和list[1],这样相当于随机选取某个位置的数,逐一放在数组的第0个位置、第1个位置。注意:count+value不能超过原本value的值,每次count++都要value--。

public static void main(String[] args) {
         Random random = new Random();
         long start = System.currentTimeMillis();

         int value = 100;
         //使用数组速度更快
         int[] list = new int[value];

         for (int j = 0; j < value; ++j) {
             list[j] = j+1;
         }

         int index = 0;
         int count = 0;
         int tmp = 0;
         while (value > 0) {
             index = random.nextInt(value);
             //System.out.println(list[count + index]);
             tmp = list[count + index];
             list[count + index] = list[count];
             list[count] = tmp;
             ++count;
             --value;
         }

         long end = System.currentTimeMillis();

         //----验证是否正确
         Arrays.sort(list);
         int i = 0, size = list.length;
         for (; i < size; ++i) {
             //System.out.println(list[i]);
             if (list[i] != (i + 1))
                 System.out.println(i + "error" + list[i]);
          }
         //----验证是否正确

         System.out.println("creat4------");
         System.out.println("执行耗时 : " + (end - start) / 1000f + " 秒 ");
         System.out.println("完了,集合大小为" + list.length);

    }
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值