JAVA JDK提供的一个自动生成主键 UUID.randomUUID()的方法 它永远都不会重复嘛??
关于是否重复,首先要说一下uuid生成的原理
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
通过组成可以看出,首先每台机器的mac地址是不一样的,那么如果出现重复,可能是同一时间下生成的id可能相同,不会存在不同时间内生成重复的数据
至于说同一时间产生重复的数据,就目前来说,是不会的除非极高的高并发(如果发生了,也可以通过原子性操作避免),
所以基本上就认为不会重复好了一般来说的话,r文件没有生成的情况可能是因为: 1、项目没有自动编译:这种时候只需要简单的编译一下工程就会有了。建议:选择菜单 project ,勾选上 bulid automatically(自动构建部署)。 2、项目中res文件夹下面的内容有错误(例如layout文件),这种时候r文件也不会出现(或者更新),这种时候需要解决文件中的错误r文件才能生成。我想这种方法会拿到系统时间,并在每个时间的基础上加上
一定位数的随机值,后还可以转换成字母编号
准确地来说,在你一个项目中重复的概率太低太低
当然世间万物都是有破绽的
假设时间是基础,你修改了系统时间,并进行足够数量的尝试
这个序列仍然有可能重复的
但是需要用到序列的方法还是变量应该没有这么多,所以说,基本不可能了
还有一个就是也许最终会检查一次项目中已经存在的序列,唯一则用,重复则继续生产
这样就永远不会重复了
有帮助别忘记采纳亲!
什么是UUID,Java中怎么产生UUID?
UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。
生成UUID的方法:
public static String getUUID32(){ String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase(); return uuid;// return UUID.randomUUID().toString().replace("-", "").toLowerCase();}
注:因为一般数据库主键为String类型,所以接收类型为String,生成的uuid数据包含-,所以要去掉-,故UUID.randomUUID().toString().replace("-", "").toLowerCase()。
扩展资料:
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16)。
其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。
参考资料:百度百科-UUIDuuid含义是通用唯一识别码 (universally unique identifier),这 是一个软件建构的标准,也是被开源软件基金会 (open software foundation, osf) 的组织应用在分布式计算环境 (distributed computing environment, dce) 领域的一部分。
uuid 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 uuid。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 uuid,即是微软的 microsoft's globally unique identifiers (guids),而其他重要的应用,则有 linux ext2/ext3 档案系统、luks 加密分割区、gnome、kde、mac os x 等等。
uuid是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的api。
// 如果使用的jdk1.5的话,那么生成uuid变成了一件简单的事,以为jdk实现了uuid:
java.util.uuid,直接调用即可.
uuid uuid = uuid.randomuuid();
string s = uuid.randomuuid().tostring();//用来生成数据库的主键id非常不错。。
//uuid是由一个十六位的数字组成,表现出来的形式例如
//550e8400-e29b-11d4-a716-446655440000UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID package com.mytest;import java.util.UUID;public class UTest {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println(uuid);
}
}GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。
UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID。
import java.util.UUID;标签:word,uuid,重复,生成,网卡,java,UUID From: https://blog.51cto.com/yetaotao/5794991
public class Test {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println (uuid);
}