【生成随机数序列】

我们只能利用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. MVC之基架

    参考 ASP.NET MVC5 高级编程(第5版) 定义: 通过对话框生成视图及控制器的模版,这个过程叫做“基架”. 基架可以为应用程序的创建.读取.更新和删除(CRUB)功能生成所需的样板代码.基架 ...

  2. JQery插件clipboard.js ----将文本复制到剪贴板的现代化方法

    ### 之前用了js自带的剪贴板对象clipboardData 对象以为就可以实现粘贴复制,但是种只支持IE的. 就找了jq的一个插件Zclip,但是网上的说法是利用了flesh来实现的,我用了之后可 ...

  3. 【MySql】join操作

    飞机票 飞机票 加油 INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录. RIGHT JOIN( ...

  4. Confluence 6 整合到其他数据库

    这个文档描述了如何整合你的 Confluence 数据库从你已经存在的数据库上到其他的数据库.这个指南被用来指导你从使用评估数据库转移到使用生产数据库. 大数据量需要第三方的数据库整合工具. 本页面对 ...

  5. Confluence 6 中样式化字体

    Confluence 提供了通过层叠样式表(CSS)调整页面展示情况的能力.本页面帮助你理解如何在 Confluence 中使用一些 CSS 样式修改字体样式和字体大小. 下面的代码为自定义的字体代码 ...

  6. Scratch 2.0-Find The Mouse 发布!

    日期:2018.8.26 星期日 博客期:007 今天随便写了一个小型游戏程序,哈哈!虽然小,但用到的逻辑还是有一定水平的.呼~毕竟就这一下子也写不出来微软一样的公司嘛!哈哈,截图放上来! 游戏分为四 ...

  7. 关系代数和sql语句对应关系

    关系代数运算符 对应sql语句 聚合操作   ∪ (UNION)并   ∩ (INTERSECTION)交   -  (DIFFERENCE)差   × (Cartesian PRODUCT)笛卡尔积 ...

  8. HashMap&线程

    1.HashMap概念 HashMap是一个散列表,存储内容是键值对(key-value)的映射, HashMap继承了AbstractMap,实现了Map.Cloneable.java.io.Ser ...

  9. poj3417lca+树上差分

    /* 给定n个点的树,在其中加入m条新边(称为非树边) 现在可以割断一条树边,一条非树边,使图分裂成两个联通块,请问有几种切割方式 对树边进行分情况讨论 如果树边不处在环中,则割断这条树边后可以割断任 ...

  10. C# Enum 类型遍历

    void Main() { new EnumForeach().Foreach(); } public class EnumForeach { public void Foreach() { fore ...