随机数浅谈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本文章由北大青鸟广安门校区搜集自互联网

HostKvm - 夏季云服务器七折优惠 香港和韩国机房月付5.95美元起

HostKvm,我们很多人都算是比较熟悉的国人服务商,旗下也有多个品牌,差异化多占位策略营销的,商家是一个创建于2013年的品牌,有提供中国香港、美国、日本、新加坡区域虚拟化服务器业务,所有业务均对中国大陆地区线路优化,已经如果做海外线路的话,竞争力不够。今天有看到HostKvm夏季优惠发布,主要针对香港国际和韩国VPS提供7折优惠,折后最低月付5.95美元,其他机房VPS依然是全场8折。第一、夏...

piayun(pia云)240元/季起云服务器,香港限时季付活动,cn2线路,4核4G15M

pia云怎么样?pia云是一家2018的开办的国人商家,原名叫哔哔云,目前整合到了魔方云平台上,商家主要销售VPS服务,采用KVM虚拟架构 ,机房有美国洛杉矶、中国香港和深圳地区,洛杉矶为crea机房,三网回程CN2 GIA,带20G防御。目前,Pia云优惠促销,年付全场8折起,香港超极速CN2季付活动,4核4G15M云服务器仅240元/季起,香港CN2、美国三网CN2深圳BGP优质云服务器超高性...

华为云年中聚惠618活动,新用户专区,云服务器低至88元/年,3年仅580.98元,热销抢购中,最后2天!

华为云怎么样?华为云用在线的方式将华为30多年在ICT基础设施领域的技术积累和产品解决方案开放给客户,致力于提供稳定可靠、安全可信、可持续创新的云服务,做智能世界的“黑土地”,推进实现“用得起、用得好、用得放心”的普惠AI。华为云作为底座,为华为全栈全场景AI战略提供强大的算力平台和更易用的开发平台。本次年终聚惠618活动相当给力,1核2G内存1m云耀云服务器仅88元/年起,送主机安全基础版套餐,...

java随机数为你推荐
google竞价排名谷歌是靠什么关键词排名的?谷歌竞价有什么特点?有什么优势?手游运营手册剑三的方士使开启阴阳之力凝聚而成的魂匣怎么做啊 有详细说明吗畅想中国畅想中国发展前景保护气球什么气球可以骑?安装迅雷看看播放器如何用手机安装迅雷看看播放器机械键盘轴大家觉得机械键盘什么轴最舒服网页打不开的原因网页老打不开是什么原因啊防钓鱼如何防钓鱼子线缠绕主线中国杀毒软件排行榜中国杀毒软件排行手工杀毒如何人工手动杀毒
深圳虚拟主机 希网动态域名 132邮箱 新加坡主机 主机点评 php探针 css样式大全 一元域名 idc是什么 qq云端 免费申请网站 台湾谷歌 国内域名 xuni 存储服务器 数据湾 ftp是什么东西 qq部落24-5 淘宝秒杀预告 最好玩的免费网络游戏 更多