使用随机算法产生一个数,要求把1-1000W之间这些数全部生成

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

代码虽然实现了。
提高效率的地方有如下:
1.初始化set集合的时候 Sets.newHashSetWithExpectedSize(value),
给初始化带个固定大小,减少了集合在扩容的时候,值重新复制的问题。这的效率稍有提高。
2.Random random = new Random();放在循环之外。


具体代码如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.  * 使用随机算法产生一个数,要求把1-1000W之间这些数全部生成。 
  3.  * (考察高效率,解决产生冲突的问题) 
  4.  */  
  5. private static void testRandom() {  
  6.     int value = 10000000;  
  7.     //int类型最大值:2的32次方 - 1 = Integer.MAX_VALUE = 2147483647,二十亿多,真够啦 。  
  8.     Set<Integer> result = Sets.newHashSetWithExpectedSize(value);  
  9.     Random random = new Random();  
  10.     long a = System.currentTimeMillis();  
  11.     while (result.size() < value + 1) {  
  12.         int i = random.nextInt(value + 1);  
  13.         result.add(i);  
  14.     }  
  15.     System.out.println("\r<br> 执行耗时 : " + (System.currentTimeMillis() - a) / 1000f + " 秒 ");  
  16.     System.out.println("完了,集合大小为" + result.size());  
  17. }  

具体代码执行结果,如下图:



因为一千万个都打印 出来,不合适;就打印个集合大小就可以了吧。再打印个执行时间。

但是效率好像并没有提升太多。
但是怎么在,产生随机数的时候,修改,使得效率,再次提高。即产生过的数就不再被随机到。
这个我就不知道啦,估计得研究下Random这个类的所有方法才可以吧。
待以后更新。


(当然集合里面多随机生产了个0)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值