Java随机数和UUID#

Java随机数

在Java项目中通常是通过Math.random方法和Random类来获得随机数,前者通过生成一个Random类的实例来实现。

此类产生的是一组伪随机数流,通过使用 48 位的种子,利用线性同余公式产生。在Java中,随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:

种子不同,产生不同的随机数。

种子相同,即使实例不同也产生相同的随机数。

两种方式设置种子:

Random r= new Random(long seed);

或者 Random r= new Random();r.setSeed(1);即种子为1。

对一组随机数,只需要记住产生的种子即可。

比如代码:

public class Client {

public static void main(String[] args) {

Random r = new Random(1);

for (int i = 0; i < 4; i++) {

System.out.println( r.nextInt(100));//0→100

}

}

}

不管运行几次,产生的随机数序列一定都是:

85,88,47,13

Random类的默认种子(无参构造)是System.nanoTime()的返回值。注意这个值是距离某一个固定时间点的纳秒数,不同的操作系统和硬件有不同的固定时间点,也就是说不同的操作系统其纳秒值是不同的,而同一个操作系统不同时间纳秒值也会不同,随机数自然也就不同了。(顺便说下,System.nanoTime不能用于计算日期,那是因为“参考”的时间点是不确定的,纳秒值甚至可能是负值,这点与System. currentTimeMillis不同。)

Java UUID

UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。UUID是长度为16-byte(128-bit)的ID,用16进制表示,一般以形如f81d4fae-7dec-11d0-a765-00a0c91e6bf6。算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成UUID。从理论上讲,如果一台机器每秒产生10000000个UUID,则可以保证(概率意义上)3240年不重复。

无须中心认证,自动生成,支持一台机器每秒生成10M次(100纳秒级,其隐含原因是指能够区分的最小时间单位为100ns,将时间作为因子时,连续生成两个UUID的时间至少要间隔100ns)。方便存取、分配、排序、查找。

代码示例:

import java.util.UUID;

public class UTest {

public static void main(String[] args) {

UUID uuid = UUID.randomUUID();

System.out.println(uuid);//产生的uuid以-隔开

String str = uuid.toString();

String temp = str.substring(0, 8) + str.substring(9, 13) + str.substring(14, 18) + str.substring(19, 23) + str.substring(24);

System.out.println(temp);

}

}

UUID Version 1:基于时间的UUID

基于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。如果应用只是在局域网中使用,也可以使用退化的算法,以IP地址来代替MAC地址--Java的UUID往往是这样实现的(当然也考虑了获取MAC的难度)。但由于时间因素的顺序为时间低位在前,高位在后,不适合做主键,可以COMB。

UUID Version 3:基于名字的UUID(MD5)

基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。

UUID Version 4:随机UUID

根据随机数,或者伪随机数生成UUID。这种UUID产生重复的概率是可以计算出来的,但随机的东西就像是买彩票:你指望它发财是不可能的,但狗屎运通常会在不经意中到来。

UUID Version 5:基于名字的UUID(SHA1)

和版本3的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。

java uuid 随机数_Java随机数和UUID相关推荐

  1. java 随机数生成算法_Java随机数的生成算法

    Java中随机数的生成算法主要有3种 1.Math.random()//产生一个0-1之间的随机数,类型为double类型 2.new Random() random.nextInextInt(100 ...

  2. java安全随机数_Java随机数的陷阱

    前言 随机数我们应该不陌生,业务中我们用它来生成验证码,或者对重复性要求不高的id,甚至我们还用它在年会上搞抽奖.今天我们来探讨一下这个东西.如果使用不当会引发一系列问题. Java中的随机数 我们需 ...

  3. java uuid 效率_java uuid第一次性能

    在java中产生uuid的方式是使用java.util.UUID. UUID.randomUUID().toString(); 我在测试redis性能时,使用uuid产生测试数据,发现多线程测试red ...

  4. uuid java 重复_Java中使用UUID工具类生成唯一标志防止重复

    import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.secur ...

  5. java 产生随机数_java生成随机数

    packagecom.rd.p2p.common.util;importjava.util.Iterator;importjava.util.LinkedHashSet;importjava.util ...

  6. UUID实现自定义随机数长度

    UUID实现自定义随机数长度 代码 效果 代码 // 根据传递的num参数,实现自定义的随机数位数输出public static String getNumUUID(int num){if (num& ...

  7. java 随机数生成实现_Java中生成随机数的实现方法总结

    搜索热词 在实际开发工作中经常需要用到随机数.如有些系统中创建用户后会给用户一个随机的初始化密码.这个密码由于是随机的,为此往往只有用户自己知道.他们获取了这个随机密码之后,需要马上去系统中更改.这就 ...

  8. java获取10位随机数_Java基础:JAVA中BitSet使用详解

    适用场景:整数,无重复: Bitset 基础 Bitset,也就是位图,由于可以用非常紧凑的格式来表示给定范围的连续数据而经常出现在各种算法设计中.上面的图来自c++库中bitset的一张图. 基本原 ...

  9. java uuid静态方法_Java UUID toString()方法与示例

    java uuid静态方法 UUID类toString()方法 (UUID Class toString() method) toString() method is available in jav ...

  10. java uuid静态方法_Java UUID timestamp()方法与示例

    java uuid静态方法 UUID类timestamp()方法 (UUID Class timestamp() method) timestamp() method is available in ...

最新文章

  1. VS Code竟然能约会,找对象不看脸,看编程水平
  2. java 唯一值_java – 在列表中查找唯一值的快速方法
  3. 5.计算机发展个人理解-电路终究是电路 软件如何控制硬件 代码如何操作硬件 硬件是怎么执行代码 代码如何执行 软件与硬件如何交互 计算机思维 抽象 封装 规范 屏蔽 协议分层...
  4. 用typedef定义函数指针类型(转)
  5. Generating RSA keys in PKCS#1 format in Java--转
  6. CodeForces - 1295B Infinite Prefixes(数学)
  7. layui参考文档地址
  8. 华为USG6330运维记录-端口回流、策略路由
  9. 漫画:位运算技巧整理汇总+一道被嫌弃的题目
  10. 王者荣耀android看不见iOS,王者荣耀转区功能来了!iOS和安卓这个限制,终于消失了...
  11. Bandizip官网最新下载 中文,绿色版 Bandizip下载
  12. Mybatis--SqlSession对象创建过程
  13. golang: Google Play退款订单数据查询
  14. linux序列拼接软件,EST序列的聚类、拼接以及纠错是怎样进行的,推荐使用那些软件?!...
  15. 浅析B2C电商系统开发特点
  16. 【Plumed教程(一)】增强采样Plumed入门
  17. uni-app写小程序音乐播放器
  18. 阿里内部业务中台的实践之路?
  19. 思博伦测试仪学习笔记(性能测试方向RFC2544)
  20. 智慧公安警务系统开发,智慧公安行业解决方案

热门文章

  1. 微服务面试题及详细答案
  2. mapgis新手教程(非常适合新手参考)
  3. Java 输入输出流实验
  4. 基于MSP430f5529的红外循迹小车
  5. 三菱FX3U-485ADP-MB通讯三种变频器程序
  6. eclipse优化方案
  7. 我和我的项目之整合腾讯云短信SDK
  8. Webuploader 出坑记
  9. 软考中级-软件设计师-查缺补漏
  10. ati自定义分辨率_Windows的自定义显示分辨率实用程序