假设希望产生位于0到某个上界之间的随机整数。
private static final Random rnd = new Random();
static int random(int n){
return Math.abs(rnd.nextInt()) % n;
}
这样写有三个缺点:
1、如果n是一个比较小的2的乘方,经过一段相当短的周期之后,随机数将会重复。
2、如果n不是2的乘方,那么平均起来,有些数会比其他的数出现的更为频繁。如果n比较大,缺点会更明显,由random方法产生的数字有2/3在取值范围的前半部分。
3、极少数情况下,它的失败时灾难性的,返回一个落在指定范围之外的数。
为了修正这三个缺点的random方法,需要了解关于随机数生成器、数论和2的求补算法的相关知识。现有的类库提供随机数生成的方法,不需要自己来做这样的工作,Random.nextInt(int)就实现产生0到某个上界的随机数功能。标准的类库经过测试,而且一旦发现缺陷,会在下个版本修正,程序员如果不持续关注,可能连方法实现细节被修改过也不会发现。
使用标准类库的好处:
使用标准类库的第一个好处是,可以充分利用这些 编写标准类库的专家的知识,以及在你之前的其他人的使用经验。
使用标准类库的第二个好处是,不必浪费时间为那些与工作不太相关的问题提供特别的解决方案。就像大多数程序员一样,应该把时间花在应用程序上,而不是底层的细节上。
使用标准类库的第三个好处是,它们的性能往往会随着时间的推移而不断提髙,无需你做任何努力。因为许多人在使用它们,被当作工业标准在使用,所以,提供这些标准类库的组 织有强烈的动机要使它们运行得更快。这些年来,许多Java平台类库已经被重新编写了,有时候是重复编写,从而导致性能上有了显著的提髙。
标准类库也会随着时间的推移而增加新的功能。如果类库中漏掉了某些功能,开发者社区(developer community)就会把这些缺点告示出来,漏掉的功能就会添加到后续的发行版本中。Java平台类库始终是在这个社区的推动下不断发展的。
使用标准类库的最后一个好处是,可以使自己的代码融入主流。这样的代码更易读、更易维护、更易被大多数的开发人员重用。