Java生成随机数我总共总结了5种方式:

(一)Math.random()静态方法:

产生的随机数是0-1之间的一个double,0<=random<=1
使用:

for(int i=0;i<10;i++)
{
System.out.println(Math.println());
}
实现原理:
When this method is frist called, it creates a single new pseudorandom-number
generator, exactly as if by the expression new java.util.Random(). This new pseudora-
-ndom-number generator is used thereafter for all calls to this method and is used
nowhere else.This method is properly synchronized to allow correct use by more than
one thread. However, if many threads need to generate pseudorandom numbers at a great
rate, it may reduce contention for each thread to have its own pseudorandom-number
generator.
当第一次调用 Math.random() 方法时,自动创建了一个伪随机数生成器,实际上用的是 new java.util.Random()。
当接下来继续调用 Math.random() 方法时,就会使用这个新的伪随机数生成器。initRNG() 方法是 synchronized
的,因此在多线程情况下,只有一个线程会负责创建伪随机数生成器(使用当前时间作为种子),其他线程则利用该伪随机
数生成器产生随机数。

(二)java.util.Random工具类:

基本算法:linear congruential pseudorandom number generator (LGC) 线性同余法伪随机数生成器缺点:可
预测。An attacker will simply compute the seed from the output values observed. This takes
significantly less time than 2^48 in the case of java.util.Random. 从输出中可以很容易计算出种子值。
It is shown that you can predict future Random outputs observing only two(!) output values in
-ime roughly 2^16. 因此可以预测出下一个输出的随机数。You should never use an LCG for security-crit-
cal purposes.在注重信息安全的应用中,不要使用 LCG 算法生成随机数,请使用 SecureRandom。
使用:
Random random = new Random();
for (int i = 0; i < 5; i++) {
System.out.println(random.nextInt());
}
Random类提供的方法:API

nextBoolean() - 返回均匀分布的 true 或者 false
nextBytes(byte[] bytes)
nextDouble() - 返回 0.0 到 1.0 之间的均匀分布的 double
nextFloat() - 返回 0.0 到 1.0 之间的均匀分布的 float
nextGaussian()- 返回 0.0 到 1.0 之间的高斯分布(即正态分布)的 double
nextInt() - 返回均匀分布的 int
nextInt(int n) - 返回 0 到 n 之间的均匀分布的 int (包括 0,不包括 n)
nextLong() - 返回均匀分布的 long
setSeed(long seed) - 设置种子

(三)java.util.concurrent.ThreadLocalRandom工具类

ThreadLocalRandom是JDK7之后提供,也是继承至java.util.Random。每一个线程有一个独立的随机数生成器,用于开发生
成随机数,能够解决多个线程发生的竞争争夺,效率更高。
使用:
public class JavaRandom {
public static void main(String args[]) {
new MyThread().start();
new MyThread().start();
}
}
class MyThread extends Thread {
public void run() {
for (int i = 0; i < 2; i++) {
System.out.println(Thread.currentThread().getName() + ": " + ThreadLocalRandom.current().nextDouble());
}
}
}

(四)java.Security.SecureRandom:

这个也是继承自java.util.Random。SecureRandom提供加密的强随机生成器(RNG),要求种子必须是不可预知的,产生非确
定性输出。SecureRandom也提供了与实现无关的算法,因此,调用方(应用程序代码)会请求特定的RNG 算法并将它传回到算法
的SecureRandom对象中。如果仅指定算法名称,如下所示:SecureRandom random = SecureRandom.getInstance(“SHA1PRNG”);
如果既指定了算法名称又指定了包提供程序,如下所示:SecureRandom random = SecureRandom.getInstance(“SHA1PRNG”, “SUN”);
使用:
SecureRandom random1 = SecureRandom.getInstance(“SHA1PRNG”);
SecureRandom random2 = SecureRandom.getInstance(“SHA1PRNG”);
for (int i = 0; i < 5; i++) {
System.out.println(random1.nextInt() + " != " + random2.nextInt());
};

(五)随机字符串:

可以使用Apache Commons-Lang包中的RandoStringUtils类。Maven依赖如下:

commons-lang
commons-lang
2.6

使用:
public class RandomStringDemo {
public static void main(String[] args) {
// Creates a 64 chars length random string of number.
String result = RandomStringUtils.random(64, false, true);
System.out.println("random = " + result);
// Creates a 64 chars length of random alphabetic string.
result = RandomStringUtils.randomAlphabetic(64);
System.out.println("random = " + result);
// Creates a 32 chars length of random ascii string.
result = RandomStringUtils.randomAscii(32);
System.out.println("random = " + result);
// Creates a 32 chars length of string from the defined array of
// characters including numeric and alphabetic characters.
result = RandomStringUtils.random(32, 0, 20, true, true, “qw32rfHIJk9iQ8Ud7h0X”.toCharArray());
System.out.println("random = " + result);
}
}`

如何在java中产生随机数相关推荐

  1. java如何实取随机数_java - 如何在Kotlin中获取随机数?

    java - 如何在Kotlin中获取随机数? 可以在2个参数之间返回随机整数的通用方法,如ruby,可以使用rand(0..n). 有什么建议吗? 16个解决方案 208 votes 我的建议是In ...

  2. Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom

    Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random, ThreadLocalRandom 即 ...

  3. java中随机数怎么定义类_浅析Java中的随机数类

    Java中的随机数是否可以重复?Java中产生的随机数能否可以用来产生数据库主键?带着这个问题,我们做了一系列测试. 1.测试一: 使用不带参数的Random()构造函数 * @author Carl ...

  4. 如何在Java中比较日期? [重复]

    本文翻译自:How to compare dates in Java? [duplicate] This question already has answers here : 这个问题已经在这里有了 ...

  5. 如何在Java中创建一个新的List

    本文翻译自:How to make a new List in Java We create a Set as: 我们创建一个Set为: Set myset = new HashSet() How d ...

  6. 如何在java中调用js方法

    [java] view plain copy/* * 加载脚本引擎,并在java中调用js方法 */ public void test2() { ScriptEngineManager manager ...

  7. java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密

    如何在JAVA中使用MD5加密对密码进行加密 发布时间:2020-11-25 17:12:40 来源:亿速云 阅读:118 作者:Leah 本篇文章为大家展示了如何在JAVA中使用MD5加密对密码进行 ...

  8. java 查找链表中间元素_如何在Java中一次性查找Java中链表的中间元素

    如何在一次传递中找到LinkedList的中间元素?这是一个 Java 和非Java程序员面试时经常被问到的编程问题.这个问题类似于检查回文或计算阶乘,有时也会要求编写代码.为了回答这个问题,候选人必 ...

  9. java 中覆 写tostring_如何在Java中正确覆盖toString()?

    如何在Java中正确覆盖toString()? 听起来有点愚蠢,但我需要帮助我的toString()方法,这是非常irking. 我尝试在网上查找,因为toString是搞砸了,"没有找到K ...

最新文章

  1. jquery ajax下拉联动,jQuery Ajax MVC 下拉框联动
  2. 欧洲两个研究团队开发出了让截肢者能感觉到并准确抓住物体的仿生手
  3. python_wifi
  4. 阿拉伯与罗马数字互转程序
  5. AIoT让一个屏有了100种用法
  6. PostBox使用小记
  7. html5音频文件生成波形图代码,HTML5/D3.js 可视音频波形柱状图
  8. Es6常用方法filter
  9. Spring 依赖注入的实现
  10. 用c语言计算2的n次方,计算2的N次方........有什么错吗?
  11. Linux基础_Hadoop环境搭建必备
  12. iPhone girl幕后推手浮出 制造者为论坛站长
  13. 非递归中序遍历---算法导论12.1-3
  14. 软件测试计划的主要内容
  15. 关于数据库、数据仓库、数据湖、数据中台概念和区别
  16. 邮箱搬家操作步骤及详细说明
  17. R语言非度量多维标尺排序NMDS及一般加性模型GAM映射教程
  18. 大数据经典实验案例-WordCount原理详解和代码书写
  19. 13 函数列与函数项级数
  20. Android图片拼接9宫格

热门文章

  1. TCP快速连接(tfo,TCP fastopen)
  2. 从0到1搭建电商营销数据分析平台(一)
  3. 【编程与物理】从打造的适用型pdf电子书谈起
  4. 81.一名【合格】前端工程师的自检清单
  5. el vue 手机号_Vue 正则表达式验证邮箱和手机号码
  6. GDAL python教程基础篇(6)OGR空间滤波器
  7. 使用 tree 命令生成目录
  8. 数据结构与算法是什么?
  9. 已解决(Python安装报错)Visit python.org to download an earlier version of Python.
  10. 跟着鸟哥学linux【二】