目录
? ?UUID是一个128位(16字节)长度的标识符,旨在唯一地标识信息和资源。它由32个十六进制数字组成,通常以5个部分分隔开来,形如“8-4-4-4-12”的字符串。UUID的独特性来自于其生成算法,基于时间戳、生成者的唯一标识符和硬件信息等多个因素。这使得UUID在极小概率下出现重复的可能性。
? ?UUID在各种软件系统中都被广泛应用。在分布式系统中,每个节点可以使用UUID来唯一标识自己,从而避免了中心化的标识分配管理。在数据库系统中,UUID常用作主键,保证在分布式环境中记录的唯一性。此外,UUID还常用于构建唯一的会话标识、生成唯一的文件名、标记资源等场景。
? ?优点之一在于,UUID能够在分布式系统中生成全局唯一标识,不依赖中心化的标识分配管理。另外,UUID的生成算法列入了时间戳等多个因素,使得冲突的概率大大降低。然而,UUID也存在缺点,其中最重要的是其长度较长、可读性较差,不适合直接作为用户可见的标识符。
package Huas;
import java.util.UUID;
public class UuidDemo {
public static void main(String[] args) {
String uuid = UUID.randomUUID().toString();
System.out.println("uuid = "+uuid);
}
}
package Huas;
import java.util.UUID;
public class UuidDemo {
public static void main(String[] args) {
//1.生成一个以lyqy -开头的ID,并且把里面的 - 去掉
String lyqy = "lyqy-" + UUID.randomUUID().toString().replaceAll("-","");
System.out.println("lyqy = "+lyqy);
//2.生成一个以 dx- 开头的ID
String uuid = String.valueOf(UUID.randomUUID());
String dx = "dx-";
dx += uuid;
System.out.println("dx = "+dx);;
}
}
package Huas;
import java.util.Random;
import java.util.UUID;
public class UuidDemo {
//自定义ALLOWED_CHARS,列举UUID可以出现在字符
private static final String ALLOWED_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
//自定义UUID长度
private static final int UUID_LENGTH = 36;
public static String generateUUID() {
StringBuilder uuidBuilder = new StringBuilder(UUID_LENGTH);
Random random = new Random();
for (int i = 0; i < UUID_LENGTH; i++) {
if (i == 8 || i == 13 || i == 18 || i == 23) {
uuidBuilder.append('-');
} else {
uuidBuilder.append(ALLOWED_CHARS.charAt(random.nextInt(ALLOWED_CHARS.length())));
}
}
return uuidBuilder.toString();
}
public static void main(String[] args) {
String customUUID = generateUUID();
System.out.println(customUUID+"\n"+"customUUID长度 = "+customUUID.length());
}
}
? ?这段代码的作用是生成一个32位的UUID,并按照格式 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 进行分段,其中 X 代表由数字和字母组成的随机字符。
? ?首先,定义了一个常量 ALLOWED_CHARS,其中包含了所有允许出现的字符,包括数字、大写字母和小写字母。然后定义了常量 UUID_LENGTH,表示生成的UUID的长度。
? ? 接下来,定义了一个 generateUUID() 方法,使用 StringBuilder 来构建UUID字符串。随机数生成器 Random 用来随机选择 ALLOWED_CHARS 中的字符拼接到 UUID 中。
? ? 通过一个 for 循环,迭代长度为 UUID_LENGTH 的次数,其中 i 代表每次迭代的索引。在每次迭代中,如果索引 i 为 8、13、18 或 23,那么将"-"字符添加到 UUID 末尾,否则随机选择 ALLOWED_CHARS 中的字符添加到 UUID 末尾。
? ? 最后,在 main() 方法中调用 generateUUID() 方法生成一个自定义格式的 UUID,并将其打印输出。
? ?UUID作为一种用于生成唯一标识符的标准,在当今分布式系统和云计算的背景下显得尤为重要。它在各种场景中发挥着不可替代的作用,保证了分布式系统中各种信息的唯一性。同时,UUID也在一定程度上解决了分布式系统中唯一标识符的分配和管理问题。不过,在使用UUID时,我们也需要权衡其优缺点,并结合具体场景做出合理的选择。