【生成随机数序列】

我们只能利用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. 51nod--1242 斐波那契数列第N项 (矩阵乘法优化)

    题目: 1242 斐波那契数列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) ...

  2. js用replaceAll全部替换的方法

    1 前言 js中字符串整体替换,只有自带的replace,并没有replaceAll,如果我们需要把字符串中的字符统一替换,可以用正则表达式,由于经常使用就在String直接加个原生方法,方便调用. ...

  3. 哎呀,搬运blog好累啊,96篇呢QwQ

    累死了,哼 哎呀,算了,不搬了不搬了

  4. C#结婚吧(if else if)

  5. SQLServer 2014 本地机房HA+灾备机房DR解决方案

    SQLServer 2014 主数据中心HA+灾备机房DR解决方案 SQLServer 2008 的时候使用 local WSFC+DR Mirror方式,对象是单数据库 两个单独的 WSFC 上使用 ...

  6. Confluence 6 管理站点模板

    模板是一个预先定义的页面,这个预先定义的页面可以在创建新页面的时候预先载入.模板可以由用户创建也可以通过蓝图提供.请查看 Page Templates 和 Blueprints 页面中的内容. 管理员 ...

  7. linux文件权限目录配置笔记

    ###linux 文件权限目录配置笔记 ---------- 多人多任务环境 linux 一般将文件可存取的身份分为三个类别:owner group others Permission deny ls ...

  8. LeetCode(117):填充同一层的兄弟节点 II

    Medium! 题目描述: 给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *n ...

  9. centos7安装laravel

    一. 安装前准备1. 安装screenyum install screen 2. 安装wgetyum install wget 3. 更新yumyum update 4. 安装额外资源库yum ins ...

  10. kali访问宿主机Web页面解决方案

    1.首先安装好PHPDVWA测试平台,将等级设置成low,kali中自带了python2.7.为了不再宿主机中修改python3.6,所以要利用kali来模访问宿主机中的Web页面.如果不进行配置修改 ...