java uuid 随机数_Java随机数和UUID[通俗易懂]

java uuid 随机数_Java随机数和UUID[通俗易懂]Java随机数和UUID#Java随机数在Java项目中通常是通过Math.random方法和Random类来获得随机数,前者通过生成一个Random类的实例来实现。此类产生的是一组伪随机数流,通过使用48位的种子,利用线性同余公式产生。在Java中,随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:种子不同,产生不同的随机数。种子相同,即使实例不同也产生相同的随机数。两种方式设…

大家好,又见面了,我是你们的朋友全栈君。

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)算法。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159265.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python的命名规范「建议收藏」

    Python的命名规范「建议收藏」Python中常用的一些命名规范,遵守代码命名规范,使代码看起更优雅。

    2022年6月25日
    26
  • integer转换为string_go 字符串转int

    integer转换为string_go 字符串转intstr:=“123”//string转inti,err:=strconv.Atoi(str)iferr==nil{fmt.Printf(“i:%v\n”,i)}//string转int64i64,err:=strconv.ParseInt(str,10,64)iferr==nil{fmt.Printf(“i64:%v\n”,i64)…

    2022年9月20日
    5
  • c语言运行后电脑很卡,如何让电脑提速,电脑卡是什么原因?

    c语言运行后电脑很卡,如何让电脑提速,电脑卡是什么原因?前言昨天的文章被限制了,正在申诉刚好最近有网友问小编这样一个问题:花了六千买的独显笔记本,用了才一年就卡的不行了,请问电脑卡是什么原因?小编对电脑还算颇有研究,看了网友电脑配置并不算低,导致电脑卡的原因主要在于系统优化与一些硬件方面的问题,下面小编就来说说如何让电脑提速。正文电脑卡是什么原因?导致电脑卡的原因有很多,综合来看,无非就是软件与硬件的问题。其中,软件层面主要是系统优化,硬件方面则主要是…

    2022年6月7日
    40
  • app测试工具monkey_monkeyapp下载

    app测试工具monkey_monkeyapp下载前言Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。接下来将讲解如何用真机来测试Androidapp操作步骤手机连接电脑(用数据线进行连接)win+r——>cmd右键管理员运行首先测试一下是否连接上:adbdevices输入adbshell,进入shell命令调试模式。adbshell回车之后输入pmlistpackage再回车就会出现这样的包名接下来,我们打开新的cmd,右键管理员身份运行输入adb

    2025年8月27日
    8
  • 运维人员常用到的 11 款服务器监控工具

    运维人员常用到的 11 款服务器监控工具点击上方“民工哥技术之路”,选择“设为星标”回复“1024”获取独家整理的学习资料!服务器监控工具功能相当强大,无论何时何地,我们都可以了解到服务器的功能以及性能。服务器监控工具的使用,…

    2022年5月20日
    44
  • kafka介绍和使用[通俗易懂]

    kafka介绍和使用[通俗易懂]1.1.      主要功能根据官网的介绍,ApacheKafka®是一个分布式流媒体平台,它主要有3种功能:  1:Itletsyoupublishandsubscribetostreamsofrecords.发布和订阅消息流,这个功能类似于消息队列,这也是kafka归类为消息队列框架的原因  2:Itletsyoustorestreamsofrecordsin…

    2022年10月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号