随机数浅谈Java中的几种随机数

java随机数  时间:2021-02-13  阅读:()

浅谈Jav a中的几种随机数

众所周知随机数是任何一种编程语言最基本的特征之一。而生成随机数的基本方式也是相同的产生一个0到1之间的随机数。看似简单但有时我们也会忽略了一些有趣的功能。

我们从书本上学到什么

最明显的也是直观的方式在Java中生成随机数只要简单的调用java. lang.Math.rando m()

在所有其他语言中生成随机数就像是使用Math工具类如abs, pow, f loor

, sqrt和其他数学函数。大多数人通过书籍、教程和课程来了解这个类。一个简单的例子从0.0到1.0之间可以生成一个双精度浮点数。那么通过上面的信息开发人员要产生0.0和10.0之间的双精度浮点数会这样来写

Math.rando m() * 10

而产生0和10之间的整数则会写成

Math.round (Math.rando m() * 10)

进 阶

通过阅读M ath.rando m()的源码或者干脆利用IDE的自动完成功能开发人

员可以很容易发现 java. lang.Math.rando m()使用一个内部的随机生成对象-一个很强大的对象可以灵活的随机产生布尔值、所有数字类型甚至是高斯分布。例如new java.util.Rando m() .nextI nt(10)

它有一个缺点就是它是一个对象。它的方法必须是通过一个实例来调用这意味着必须先调用它的构造函数。如果在内存充足的情况下像上面的表达式是可以接受的但内存不足时就会带来问题。

一个简单的解决方案可以避免每次需要生成一个随机数时创建一个新实例那就是使用一个静态类。猜你可能想到了jav a. lang.Math很好我们就是改 良java .lang.Math的初始化。虽然这个工程量低但你也要做一些简单的单元测试来确保其不会出错。

假设程序需要生成一个随机数来存储 问题就又来了。 比如有时需要操作或保护种子(seed) 一个内部数用来存储状态和计算下一个随机数。在这些特殊情况下共用随机生成对象是不合适的。

并 发

在Java EE多线程应用程序的环境中随机生成实例对象仍然可以被存储在类或其他实现类作为一个静态属性。幸运的是 java.util.Rando m是线程安全的所以不存在多个线程调用会破坏种子(seed)的风险。

另一个值得考虑的是多线程jav a. lang.Threa dLoca l的实例。偷懒的做法是通过Ja va本身A PI实现单一实例 当然你也可以确保每一个线程都有自己的一个实例对象。

虽然Jav a没有提供一个很好的方法来管理java.util.Rando m的单一实例。但是期待已久的Java 7提供了一种新的方式来产生随机数java.util.concu rrent .Threa dLoca lRand om.curre nt() .nextI nt(10)

这个新的A PI综合了其他两种方法的优点单一实例/静态访问就像Math.rando m()一样灵活。 Threa dLoca lRand om也比其他任何处理高并发的方法要更快。

经验

Chris Maras ti-Georg指出:

Math.round (Math.rando m() * 10)

使分布不平衡例如 0.0-0.499999将四舍五入为0而0.5至1.499999将四舍五入为1。那么如何使用旧式语法来实现正确的均衡分布如下

Math.floor (Math.rando m() * 11

幸运的是如果我们使用java .util.Rando m或jav a.util.concu rrent

.Threa dLoca lRand om就不用担心上述问题了。

Java实战项目里面介绍了一些不正确使用java.util.Rando m API的危害。这个教训告诉我们不要使用

Math.abs(rnd.nextI nt() )%n

而使用rnd.nextI nt(n)

ps本文章由北大青鸟广安门校区搜集自互联网

阿里云年中活动最后一周 - ECS共享型N4 2G1M年付59元

以前我们在参与到云服务商促销活动的时候周期基本是一周时间,而如今我们会看到无论是云服务商还是电商活动基本上周期都要有超过一个月,所以我们有一些网友习惯在活动结束之前看看商家是不是有最后的促销活动吸引力的,比如有看到阿里云年中活动最后一周,如果我们有需要云服务器的可以看看。在前面的文章中(阿里云新人福利选择共享性N4云服务器年79.86元且送2月数据库),(LAOZUO.ORG)有提到阿里云今年的云...

陆零(¥25)云端专用的高性能、安全隔离的物理集群六折起

陆零网络是正规的IDC公司,我们采用优质硬件和网络,为客户提供高速、稳定的云计算服务。公司拥有一流的技术团队,提供7*24小时1对1售后服务,让您无后顾之忧。我们目前提供高防空间、云服务器、物理服务器,高防IP等众多产品,为您提供轻松上云、安全防护 为核心数据库、关键应用系统、高性能计算业务提供云端专用的高性能、安全隔离的物理集群。分钟级交付周期助你的企业获得实时的业务响应能力,助力核心业务飞速成...

hostyun评测香港原生IPVPS

hostyun新上了香港cloudie机房的香港原生IP的VPS,写的是默认接入200Mbps带宽(共享),基于KVM虚拟,纯SSD RAID10,三网直连,混合超售的CN2网络,商家对VPS的I/O有大致100MB/S的限制。由于是原生香港IP,所以这个VPS还是有一定的看头的,这里给大家弄个测评,数据仅供参考!9折优惠码:hostyun,循环优惠内存CPUSSD流量带宽价格购买1G1核10G3...

java随机数为你推荐
ovOV是什么意思,还有HR是什么意思?注:某两个英文单词缩写。湖南商标注册湖南商标注册代办公司手机区号手机号码+86是移动区号还是联通的区号?显卡温度多少正常显卡温度多少正常ps抠图技巧ps抠图多种技巧,越详细越好,急~~~~~~~申请证书申请毕业证书唱吧电脑版官方下载电脑上可以安装唱吧吗?童之磊湖北中文在线数字出版有限公司怎么样?苹果5怎么越狱苹果5怎么越狱?怎么点亮qq空间图标如何点亮QQ空间图标
国外虚拟主机 ip反查域名 cn域名 域名解析服务器 42u标准机柜尺寸 监控宝 tk域名 北京主机 申请个人网页 php空间购买 河南移动梦网 netvigator 香港ip 美国代理服务器 月付空间 机柜尺寸 电脑主机响 免费论坛空间 最好的空间留言 电脑主机噪音大 更多