【生成随机数序列】

我们只能利用Math.random()方法只能生成一个在[0,1)之间的double类型浮点数。

但如果我们想要生成[min, max]之间的随机整数时该怎么办呢?

此时可以用:

   int rdmNum = (int) (Math.random() * (max + 1 - min) + min);

【随机数生成器(存在重复随机数)】

   public static int[] createRandomArray(int arrLength, int rdmMin, int rdmMax) {
     //根据所给数组长度,生成所要的数组
  int[] arr = new int[arrLength];
     //给数组赋随机值
  for (int i = 0; i < arr.length; i++) {
  arr[i] = (int) (Math.random() * (rdmMax + 1 - rdmMin) + rdmMin);
  }
     //返回这个数组
  return arr;
  }

【不重复随机数生成器】

该方法可以返回一个在[rdmMin,rdmMax]范围内的随机整数数组,实测[1, 300000]内随机数组生成耗时10476毫秒,效率不错

     // 该方法可以返回一个在[rdmMin,rdmMax]范围内的随机整数数组,效率极高
public static int[] createRandomNoRepeatArray(int arrLength, int rdmMin, int rdmMax) {
// 显然,我们不能创建一个长度为100,元素随机范围为1~10的数组,并且还指望它不重复。。。
// 所以我们的数组长度不能大于随机数范围长度!
// 创建指定长度的数组
if(arrLength > (rdmMax - rdmMin + 1)){
System.out.println("数组长度不能大于随机数范围长度!");
// 程序停止运行
System.exit(0);
}
int[] rdmArr = new int[arrLength];
// 创建一个有序集合,随机数从中挑选
List<Integer> rdmNum = new ArrayList<Integer>();
// 将随机范围内的整数赋给该集合,此时显然该集合中的元素不重复
for (int i = rdmMin; i <= rdmMax; i++) {
rdmNum.add(i);
}
// 此时给指定数组赋值赋的是随机索引中的元素
for (int i = 0; i < rdmArr.length; i++) {
// 生成随机索引,这里生成的随机索引范围应该逐次减1
int index = (int) (Math.random() * (rdmMax - rdmMin + 1 - i));
// 根据随机索引获取元素
rdmArr[i] = rdmNum.get(index);
// 删除该索引的元素。删除后,后者元素自动向前补位,List集合长度减1。
rdmNum.remove(index);
}
return rdmArr;
}

【不重复随机数生成器2】

返回值类型为HashSet<Integer>,再转为int[]数组性能就会下降一些,有时候也没必要非用int[]数组

生成[1,2000000]之间的随机数耗时12580毫秒,这个是目前效率最高的。

     public static HashSet<Integer> createRandomSet(int arrLength, int rdmMin, int rdmMax) {
// 实例化一个HashSet集合
HashSet<Integer> hs = new HashSet<Integer>(); while (hs.size() != arrLength) {
// 循环赋指定范围内的随机值
hs.add((int) (Math.random() * (rdmMax + 1 - rdmMin) + rdmMin));
}
return hs;
}

Java中随机数生成的问题的更多相关文章

  1. Java中随机数生成的两种方法,以及math的floor

    1.Math的random方法,调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选 ...

  2. JavaSE&&JavaEE&&JavaME的区别【Java中常用的包结构】

    一.javaEEJavaSEJavaME用的同一个jar包吗? javaEE JavaSE javaME 用的JDK是同一个,开发j2SE工程的话只要有JDK就可以了,开发J2EE工程和J2ME工程除 ...

  3. Java中产生随机数的两个方法

    Java中产生随机数的两个方法 一.利用random方法来生成Java随机数. 在Java语言中生成Java随机数相对来说比较简单,因为有一个现成的方法可以使用.在Math类中,Java语言提供了一个 ...

  4. 对Java中HashCode方法的深入思考

    前言 最近在学习 Go 语言,Go 语言中有指针对象,一个指针变量指向了一个值的内存地址.学习过 C 语言的猿友应该都知道指针的概念.Go 语言语法与 C 相近,可以说是类 C 的编程语言,所以 Go ...

  5. 【Java基础】JAVA中优先队列详解

    总体介绍 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素).这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序( ...

  6. java中的锁

    java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够.于是再次翻看了一下书里的内容,突然有点打开脑门的感觉.看来确实是要学习的最好方式 ...

  7. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  8. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  9. java中Action层、Service层和Dao层的功能区分

    Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...

随机推荐

  1. 【原创】Java基础之简单修改jar包中的class

    有时需要修改很多jar(假设这些jar都位于lib目录)中其中一个jar中的某一个类,而且又没有原始代码或ide,这时最简单的方式是: 1 进入lib目录 # cd lib # ls test.jar ...

  2. [MySQL]group by 与 having 结合函数 的统计技巧

    group by 与 having 允许字段使用函数,根据函数运行的结果group by分组或having设置选择条件; 同时group by 与 having 也允许使用字段别名 示例表a: id ...

  3. css中input框不可点击+首行缩进

    Css 1)text-indent::首行缩进 2)disabled="true"设置input框不可以点击 3)Css:xx!important:声明提前优先级最高..!impo ...

  4. Oracle 高水位说明和释放表空间,加快表的查询速度

    高水位的介绍 数据库运行了一段时间,经过一些列的删除.插入.更改操作有些表的高水位线就有可能和实际的表存储数据的情况相差特别多,为了提高检索该表的效率,建议对这些表进行收缩: 查找高水位线的表 查找表 ...

  5. js小方法积累,将一个数组按照n个一份,分成若干数组

    // 把一个数组按照一定长度分割成若干数组 function group(array, subGroupLength) { let index = 0; let newArray = []; whil ...

  6. 进程与程序 并行 并发 串行 阻塞 join函数

    进程是正在运行的程序,程序是程序员编写的一对代码,也就是一堆字符,当这堆代码被系统加载到内存并执行,就有了进程. (需要注意的是:一个程序是可以产生多个程序,就像我们可以同时运行多个QQ程序一样,会形 ...

  7. SpringBoot图片上传(二)

    需求简介:做新增的时候,需要上传图片.(⊙o⊙)…这需求描述也太简单了吧,限制文件大小60*60 512kb ,第一次做,记录一下嗷,废话就不啰嗦了 上代码 代码: //html代码<div c ...

  8. C#概念总结(三)

    1.定义结构体 定义了结构体,必须使用了stuct语句,struct定义了一个带有多个成员的的新数据类型.C# 的结构不同于C的.具有一下等特点: 结构可以有方法.字段.索引.属性.运算方法和事件.结 ...

  9. bzoj 2301

    一道莫比乌斯反演入门题. 首先观察题目要求:的数对数 首先可以发现,这个东西同时有上界和下界,所以并不是很容易计算 那么我们变下形,可以看到:原式= 是不是清晰很多了?(当然没有!) 不,这一步很重要 ...

  10. SpringMVC 框架完成图片上传到项目路径操作

    /** * 保存添加 * * @return */ @RequestMapping(value = "taizhang/add.action", method = { Reques ...