news 2026/7/2 4:08:31

Java中随机数生成_java 随机数,零基础入门到精通,收藏这篇就够了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java中随机数生成_java 随机数,零基础入门到精通,收藏这篇就够了

Java 中随机数生成:零基础入门到精通(2025-2026 最新实用指南)

Java 提供了多种生成随机数的方式,从最古老的java.util.Random到现代推荐的java.util.concurrent.ThreadLocalRandom,再到加密级别的SecureRandom,每一种都有自己的适用场景。

下面按“使用频率 + 推荐程度”排序,带你从入门用到精通。

1. 目前(2025-2026)最推荐的几种方式对比

方式类名线程安全性能适用场景推荐指数备注
ThreadLocalRandomjava.util.concurrent.ThreadLocalRandom是(每个线程独立)★★★★★99% 的业务场景(游戏、模拟、抽奖、测试数据)★★★★★现代首选
Randomjava.util.Random否(有锁)★★★单线程或对性能要求不高★★★历史遗留代码常见
SplittableRandomjava.util.SplittableRandom★★★★并行流 + 大规模随机数生成★★★★Java 8 引入,适合 Stream 并行
SecureRandomjava.security.SecureRandom★★密码学、安全相关(token、盐、nonce)★★★唯一加密安全随机数生成器
Math.random()java.lang.Math否(内部用 Random)★★★非常简单的脚本/教学场景★★不推荐在正式项目中使用

2. 代码示例 – 各种场景最推荐写法(直接复制用)

方式一:ThreadLocalRandom(99% 场景首选)
importjava.util.concurrent.ThreadLocalRandom;// 1. 随机整数 [0, n)intnum=ThreadLocalRandom.current().nextInt(100);// 0 ~ 99// 2. 指定范围 [min, max)intscore=ThreadLocalRandom.current().nextInt(60,101);// 60 ~ 100// 3. 随机 longlongbigNum=ThreadLocalRandom.current().nextLong();// 4. 随机 double [0.0, 1.0)doubled=ThreadLocalRandom.current().nextDouble();// 5. 随机 booleanbooleancoin=ThreadLocalRandom.current().nextBoolean();// 6. 随机 float [0.0f, 1.0f)floatf=ThreadLocalRandom.current().nextFloat();// 7. 高斯分布(正态分布)- 常用于模拟身高、体重、考试分数doubleheight=ThreadLocalRandom.current().nextGaussian()*10+170;// 均值170cm,标准差10
方式二:经典 Random(老项目常见)
importjava.util.Random;Randomrand=newRandom();// 建议只创建一个实例,不要每次都 new// 基本用法同上,只是把 ThreadLocalRandom.current() 换成 randintn=rand.nextInt(100);doubled=rand.nextDouble();

重要:不要在循环里反复new Random(),会产生大量重复或低质量随机数。

方式三:SecureRandom(安全敏感场景)
importjava.security.SecureRandom;importjava.util.Base64;SecureRandomsr=newSecureRandom();// 生成 32 字节随机盐(密码哈希常用)byte[]salt=newbyte[32];sr.nextBytes(salt);// 转 base64 常用于 tokenStringtoken=Base64.getUrlEncoder().withoutPadding().encodeToString(salt);

常见写法对比(记住这个就够了)

// 错误示范(低质量 + 性能差)for(inti=0;i<10000;i++){newRandom().nextInt(100);// 千万别这样写}// 推荐示范ThreadLocalRandom.current().nextInt(100);// 简洁、安全、高性能

3. 常见需求一站式解决方案

你想要的效果推荐写法(2025-2026)说明
随机整数 [min, max]ThreadLocalRandom.current().nextInt(min, max + 1)注意要 +1
从 List/Set 随机取一个元素list.get(ThreadLocalRandom.current().nextInt(list.size()))最简洁
按权重随机(抽奖、掉落)用 Alias Method 或自己写累加权重 + 二分查找(或用第三方库)ThreadLocalRandom.nextDouble() 判断区间
随机打乱数组/ListCollections.shuffle(list, ThreadLocalRandom.current())线程安全版
生成随机字符串(验证码、盐)SecureRandom+ Base64 或自定义字符集安全场景必用 SecureRandom
模拟高斯分布(考试成绩、身高)ThreadLocalRandom.current().nextGaussian() * 标准差 + 均值非常常用
并行流中生成随机数SplittableRandomThreadLocalRandom(后者更简单)避免锁竞争

4. 经典面试/源码追问

  1. 为什么不推荐反复 new Random()?
    → 种子如果太接近(纳秒级),随机序列高度重复;而且有锁,性能差。

  2. ThreadLocalRandom 为什么比 Random 快很多?
    → 每个线程有独立的随机数种子和状态,无锁竞争。

  3. Math.random() 底层是什么?
    new Random().nextDouble()的封装(单例 Random),不推荐在高并发使用。

  4. 如何生成不重复的随机数(比如随机抽 10 张不重复的牌)?
    → 首选:Collections.shuffle整个集合后取前 n 个
    → 次选:用 Set 循环生成直到达到数量(效率较低)

  5. 生成 6 位数字验证码最推荐写法?

Stringcode=String.format("%06d",ThreadLocalRandom.current().nextInt(1000000));

5. 快速记忆口诀(背下来就够了)

  • 普通业务随机数 →ThreadLocalRandom.current().nextXxx()(最常用)
  • 安全相关(密码、token、盐) →SecureRandom
  • 并行流 / 大数据量 →SplittableRandomThreadLocalRandom
  • 老项目/简单脚本 →RandomMath.random()
  • 永远不要在循环里 new Random()

你现在最常遇到的随机数场景是哪一种?

  • 游戏掉落/抽奖?
  • 测试数据生成?
  • 验证码/唯一码?
  • 按权重随机?
  • 高并发场景?

告诉我具体需求,我可以给你最优写法或完整小例子。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/29 12:12:38

‌2026年测试数据生成需求暴增:成因、热度与从业者突围指南

现象概述‌ 2026年初&#xff0c;软件测试领域迎来颠覆性变革——测试数据生成需求呈现爆发式增长。这一现象并非偶然&#xff0c;而是多重技术与社会因素交织的结果。随着AI技术渗透至各行各业&#xff0c;测试数据作为保障系统稳定性的基石&#xff0c;其重要性被空前放大。…

作者头像 李华
网站建设 2026/6/26 8:12:47

收藏!华为员工转岗大模型拿百万年薪,小白/程序员入门LLM必看指南

近日&#xff0c;我在技术社群刷到一则刷屏热议帖&#xff1a;一位华为在职员工&#xff0c;从传统开发岗成功转型大模型算法岗后&#xff0c;高调晒出百万年薪收入条&#xff0c;还毫无保留地分享了自己的转岗全流程心得。这则帖子瞬间在程序员圈引爆讨论——评论区里&#xf…

作者头像 李华
网站建设 2026/7/2 0:27:18

基于vue3实施部门权限分配及审批的监管系统-开题报告 黄耀兴202006050071 (2)

目录研究背景与意义系统目标技术选型系统模块设计创新点预期成果项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作研究背景与意义 部门权限分配及审批监管系统在现代企业管理中具有重要作用。随着企业规模扩…

作者头像 李华
网站建设 2026/6/25 22:45:22

基于Vue技术的营养食品搭配系统的设计与实现任务书

目录系统背景与目标技术选型核心功能模块关键实现技术预期成果备注项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统背景与目标 现代人对健康饮食需求日益增长&#xff0c;但缺乏专业营养知识。该系统基…

作者头像 李华
网站建设 2026/7/1 22:55:45

域控制器架构十年演进

域控制器&#xff08;Domain Control Unit, DCU&#xff09; 的十年&#xff08;2015–2025&#xff09;&#xff0c;是汽车电子电气架构&#xff08;EEA&#xff09;从“诸侯割据”走向“高度中央集权”的剧变史。 它完成了从上百个分散的 ECU 到几个核心“域”的集成&#x…

作者头像 李华
网站建设 2026/7/1 21:39:38

视觉感知十年演进

视觉感知&#xff08;Visual Perception&#xff09; 的十年&#xff08;2015–2025&#xff09;&#xff0c;是从“识别照片里的像素”向“重建实时三维物理世界”的跨越。 视觉感知是自动驾驶的“眼睛”。这十年间&#xff0c;视觉算法完成了从 2D 到 3D、从局部到全局、从“…

作者头像 李华