当前位置:   article > 正文

java 随机数高效生成_java 随机生成最快的方式

java 随机生成最快的方式

分享牛,分享牛原创。近期去面试经常被问到java如何生产随机数,以及生成很大的字符串保证不能重复,还要考虑性能,之前本人面试别人的时候,可能不会问这个问题。既然这个java随机数问题经常被问到,那咱们也就写几种实现方式吧。仅供参考。

1.1.1. 第一种方式

第一种方式,咱们考虑一下,生成的字符串不能重复,怎么办呢?首先想到hashMaphashSet的特性吧。那怎么就先用这种方式实现吧。以下是hashMap的实现方式。

  1. public static void main(String[] args) {
  2. Object[] values = new Object[100];
  3. Random random = new Random();
  4. HashMap<Object, Object> hashMap = new HashMap<Object, Object>(50);
  5. // 生成随机数字并存入HashMap
  6. for(int i = 0;i < values.length;i++){
  7. int number = random.nextInt(100) + 1;
  8. hashMap.put(number, i);
  9. }
  10. values=hashMap.keySet().toArray();
  11. // 遍历数组并打印数据
  12. for(int i = 0;i < values.length;i++){
  13. System.out.print(values[i] + "\t");
  14. }
  15. }

这里需要注意的就是hashMap中的增长因子的问题了。要尽量避免HashMap中的数组扩容问题。

hashMap中的构造函数两个参数的含义:

   初始容量,加载因子

1.1.2. 第二种方式

可以把希望生成的值放入到一个数组中,然后程序随机去读取数组中任意两个坐标,如果坐标相等则继续随机,如果坐标不相等,就交换两个坐标的值。具体的实现如下:

  1. int values[] = new int[100];
  2. int temp1,temp2,temp3;
  3. Random r = new Random();
  4. //初始化数组
  5. for(int i = 0;i < values.length;i++){
  6. values[i] = i + 1;
  7. }
  8. //随机交换values.length次
  9. for(int i = 0;i < values.length;i++){
  10. temp1 = Math.abs(r.nextInt()) % (values.length-1); //随机产生一个位置
  11. temp2 = Math.abs(r.nextInt()) % (values.length-1); //随机产生另一个位置
  12. if(temp1 != temp2){
  13. temp3 = values[temp1];
  14. values[temp1] = values[temp2];
  15. values[temp2] = temp3;
  16. }
  17. }
  18. // 遍历数组并打印数据
  19. for(int i = 0;i < 20;i++){
  20. System.out.print(values[i] + "\t");
  21. }

1.1.3. 总结

个人觉得数组第二种的方式比较快,因为数组的访问速度快。这也是数组结构决定的。

分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/106961
推荐阅读
相关标签
  

闽ICP备14008679号