【生成随机数序列】

我们只能利用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结合testng,利用yaml做数据源的数据驱动实例

    testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以yaml为例: 备注:@DataProvider的返回 ...

  2. 用sqlplus为oracle创建用户和表空间

    用Oracle自带的企业管理器或PL/SQL图形化的方法创建表空间和用户以及分配权限是相对比较简单的, 本文要介绍的是另一种方法就是使用Oracle所带的命令行工具SQLPLUS来创建表空间. 打开S ...

  3. 银联支付Java开发

    注:原来来源于: <  银联支付Java开发  > 银联的demo写的不错,基本上可以直接使用. 首先是对acp_sdk.properties的内容修改,注意这个文件的文件名不能进行修改. ...

  4. Confluence 6 安装 Oracle

    如果你还没有在安装可以连接的 Oracle 数据库,请先下载后进行安装.请参考 Oracle 文档 来获取有关安装的指南. 当你设置你的 Oracle 服务器的时候: 字符集 必须使用 AL32UTF ...

  5. LeetCode(96): 不同的二叉搜索树

    Medium! 题目描述: 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: ...

  6. servlet 乱码解决方法

    一. servlet 发送的html 页面中文乱码 解决方法, 1.加入如下代码 response.setCharacterEncoding("UTF-8"); 2.在html页面 ...

  7. 第八周学习总结-C#、C++

    2018年9月2日 今天是小学期开始第三天,本周前几天看了看C#和C++,用C#窗体做了个计算器,然后还用Scratch做了一个贪吃蛇的脚本. 31号小学期开始,到今天我把A类基本做完了.一开始做通讯 ...

  8. 关于vue项目去除margin和padding后设置元素width和height为100%后,出现滚动条问题(移动端)

    bug点,这个页面设置100%(100vw和100vh).页面出现抖动. 经过一番检察,原因出现在,vue项目自动添加的一个div上.就是body里的最后一个.如果选中这个元素,右键删除它.页面就不会 ...

  9. C++ lstrlen()

    关于lstrlen function,参考:https://msdn.microsoft.com/en-us/library/windows/desktop/ms647492(v=vs.85).asp ...

  10. 常用的web服务器软件整理

    (1)ApacheApache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上.Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软 ...