random函数详解
2017-01-12 15:12
225 查看
1. 随机函数 Math.random()
Math.random(); 取值范围是 [ 0.0,1.0 ) 的左闭右开区间。具体源代码如下所示:
Math.random()是生成0~1之间的小数(double类型的),类似生成的结果如下图所示:
最上面的两个图贴出来的是Math.random()的源代码,当我们开始直接使用Math.random()的时候,发现进入会判断random是否为空,如果为空则创建一个Random对象否则直接通过这个random生成一个0 ~ 1 之间的double类型小数。应用案例:
2. 随机函数 java.util.Random()
下面Random()的两种构造方法:
Random():创建一个新的随机数生成器。
Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
我们可以在构造Random对象的时候指定种子,如:Random r1 = new Random(20);或者默认当前系统时间的毫秒数作为种子数:Random r1 = new Random();
具体随机种子源代码如下:
需要说明的是:你在创建一个Random对象的时候可以给定任意一个合法的种子数,种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系。如下面的Java代码:
初始化时25并没有起直接作用(注意:不是没有起作用),rand.nextInt(100);中的100是随机数的上限,产生的随机数为0-100的整数,不包括100 --> [0 , 100)
课外引入:
产生随机数函数以及线程池中的一些函数使用的都是System.nanoTime,System.nanoTime提供相对精确的计时,但是不能用他来计算当前日期。此方法只能用于测量已过的时间,与系统或钟表时间的其他任何时间概念无关。返回值表示从某一固定但任意的时间算起的毫微秒数
具体不同案例对比如下:
<1. 种子相同的随机数
<2. 缺省参数的随机数
Math.random(); 取值范围是 [ 0.0,1.0 ) 的左闭右开区间。具体源代码如下所示:
Math.random()是生成0~1之间的小数(double类型的),类似生成的结果如下图所示:
最上面的两个图贴出来的是Math.random()的源代码,当我们开始直接使用Math.random()的时候,发现进入会判断random是否为空,如果为空则创建一个Random对象否则直接通过这个random生成一个0 ~ 1 之间的double类型小数。应用案例:
2. 随机函数 java.util.Random()
下面Random()的两种构造方法:
Random():创建一个新的随机数生成器。
Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
我们可以在构造Random对象的时候指定种子,如:Random r1 = new Random(20);或者默认当前系统时间的毫秒数作为种子数:Random r1 = new Random();
具体随机种子源代码如下:
需要说明的是:你在创建一个Random对象的时候可以给定任意一个合法的种子数,种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系。如下面的Java代码:
初始化时25并没有起直接作用(注意:不是没有起作用),rand.nextInt(100);中的100是随机数的上限,产生的随机数为0-100的整数,不包括100 --> [0 , 100)
课外引入:
产生随机数函数以及线程池中的一些函数使用的都是System.nanoTime,System.nanoTime提供相对精确的计时,但是不能用他来计算当前日期。此方法只能用于测量已过的时间,与系统或钟表时间的其他任何时间概念无关。返回值表示从某一固定但任意的时间算起的毫微秒数
具体不同案例对比如下:
<1. 种子相同的随机数
<2. 缺省参数的随机数
相关文章推荐
- Oracle / PLSQL函数 - LENGTH和LENGTHB
- C#获取本周五日期字符串
- css学习笔记
- KCF 跟踪算法(3)
- [Leetcode] 413. Arithmetic Slices
- react native组件通信以及
- 【游戏设计模式】之一 序言:架构,性能与游戏
- Android ViewTreeObserver简介
- datePicker时间控件最大日期、最小日期设置
- javaScript深入学习
- 李开复 6000 字长文,揭开 AI 创业的 10 个真相
- iOS FMDB的使用
- OC NSString基础学习
- BZOJ 3675 [Apio2014] 序列分割 斜率优化
- java Calendar类获取时间的前一天和后一天
- Android打开微信本地数据库详细步骤二
- jdbcTemplate 查询
- java和 javaw 以及 javaws的区别
- AX ODBC读取其他SQL数据库服务器数据
- java少包汇总