当前位置: 首页 > news >正文

Java基础——`UUID.randomUUID()` 方法详细介绍

这里写自定义目录标题

  • `UUID.randomUUID()` 方法详细介绍
    • 1. 概述
    • 2. UUID 的结构与格式
      • UUID 的 128 位结构划分:
    • 3. `UUID.randomUUID()` 方法详解
      • 3.1 方法签名
      • 3.2 使用示例
      • 3.3 生成原理
      • 3.4 随机数生成的范围
      • 3.5 随机字符的取值范围
    • 4. UUID 的版本与特性
      • 4.1 UUID 版本 4 的特点
    • 5. 应用场景
    • 6. `UUID.randomUUID()` 的线程安全性
    • 7. 相关方法
    • 8. 总结

UUID.randomUUID() 方法详细介绍

1. 概述

UUID.randomUUID() 是 Java 中用于生成随机 UUID(Universally Unique Identifier,通用唯一标识符)的方法。UUID 是一种 128 位的标识符,广泛应用于确保分布式系统中的对象唯一性。UUID 是标准化的,可以用作数据库中的主键、事务 ID、请求跟踪等需要唯一标识符的场景。

UUID.randomUUID() 使用的是基于随机数生成的 UUID 版本 4,它通过伪随机数生成 122 位的随机位,以保证其全球唯一性。

2. UUID 的结构与格式

UUID 是一个 128 位的标识符,通常表示为 36 个字符的字符串,格式为 8-4-4-4-12,即:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  • x 是十六进制数字(0-9 和 a-f),总共 32 个字符,中间有 4 个连字符。

例如:

d3f29e88-7e44-4f5e-8c6f-02089f4bb20e

UUID 的 128 位结构划分:

  • 前 8 个字符:随机生成。
  • 第 9-12 个字符:随机生成。
  • 第 13 个字符:固定为 4,表示版本号为 UUID 版本 4(基于随机数生成)。
  • 第 14-16 个字符:随机生成。
  • 第 17 个字符:固定的高两位是 10,表示 UUID 的变种类型。
  • 剩余字符:随机生成。

3. UUID.randomUUID() 方法详解

3.1 方法签名

UUID.randomUUID() 的方法签名如下:

public static UUID randomUUID()
  • UUID 是 Java 中的类,定义在 java.util 包下。
  • randomUUID() 是 UUID 类的静态方法,它返回一个版本 4 的 UUID 对象。

3.2 使用示例

以下是一个使用 UUID.randomUUID() 生成 UUID 并输出的示例代码:

import java.util.UUID;public class UUIDExample {public static void main(String[] args) {UUID uuid = UUID.randomUUID();System.out.println("Generated UUID: " + uuid.toString());}
}

运行结果示例:

Generated UUID: d3f29e88-7e44-4f5e-8c6f-02089f4bb20e

3.3 生成原理

UUID 版本 4 是基于随机数生成的。UUID 由 128 位组成,其中:

  • 4 位用于标识 版本号,在版本 4 中固定为 0100
  • 2 位用于标识 变种,在标准 UUID 中固定为 10
  • 剩余的 122 位 是通过伪随机数生成的。

3.4 随机数生成的范围

UUID.randomUUID() 方法生成 UUID 时,128 位中有 122 位是随机生成的。这些随机位由 Java 中的 SecureRandomThreadLocalRandom 生成,提供高质量的随机数,确保其唯一性。

  • UUID 的随机位有 122 位,因此它的取值范围是:
    [
    2^{122} = 531,691,198,313,966,349,161,522,824,112,137,830,016
    ]
    这意味着生成 UUID 版本 4 时,大约有 (5.3 \times 10^{36}) 种可能的值,几乎可以保证生成的 UUID 不会重复。

3.5 随机字符的取值范围

UUID 是以 十六进制 字符表示的,使用的字符包括:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f

每个字符都是 4 位(一个半字节)的二进制数,可以是 0 到 15 对应的十六进制字符。

  • 数字部分:取值范围是 0-9。
  • 字母部分:取值范围是 a-f,分别对应十进制的 10-15。

例如,生成的 UUID d3f29e88-7e44-4f5e-8c6f-02089f4bb20e 中:

  • d, 3, f, 2, 9 都是十六进制字符。
  • 版本号 4 位于 UUID 的第 13 个字符,固定表示 UUID 版本 4。

4. UUID 的版本与特性

UUID 有多个版本,不同版本的生成方式和适用场景不同。常见的版本包括:

  • UUID 版本 1:基于时间戳和节点生成,用于生成基于时间的唯一标识符。
  • UUID 版本 4:基于随机数生成,是 UUID.randomUUID() 使用的版本。

4.1 UUID 版本 4 的特点

  • 随机性:版本 4 的 UUID 主要通过伪随机数生成,因此具有很强的随机性和唯一性。
  • 全球唯一性:由于随机数的位数足够大(122 位随机位),UUID 版本 4 在实际应用中几乎不可能产生重复值。
  • 无时间依赖性:版本 4 不依赖于时间戳或其他外部数据,因此在分布式系统中非常适用。

5. 应用场景

UUID 是一种通用的标识符,可以应用于多种场景:

  1. 数据库主键生成:在分布式数据库或多节点数据库中,使用 UUID 作为主键可以避免 ID 冲突。
  2. 文件或资源标识:用于唯一标识系统中的文件、资源或对象。
  3. 请求跟踪:在分布式系统或微服务架构中,可以为每个请求生成唯一的 UUID,便于追踪和调试。
  4. 用户身份标识:用于标识用户、会话或事务的唯一性。

6. UUID.randomUUID() 的线程安全性

UUID.randomUUID() 是线程安全的,因为它内部使用了 Java 的 SecureRandomThreadLocalRandom 作为随机数生成器,这些类在多线程环境下可以安全使用。因此,在并发环境中使用该方法生成 UUID 也不会导致冲突或数据不一致。

7. 相关方法

除了 randomUUID(),UUID 类还提供了其他与 UUID 相关的方法:

  • UUID.fromString(String name):通过指定的字符串创建 UUID 对象。
  • UUID.nameUUIDFromBytes(byte[] name):基于名称生成 UUID(版本 3),此方法基于 MD5 哈希算法生成 UUID。

8. 总结

  • UUID.randomUUID() 是 Java 中常用的生成唯一标识符的方法,生成基于随机数的 UUID 版本 4。
  • 生成的 UUID 是 128 位长的标识符,表现为 36 个字符的十六进制字符串。
  • 其中有 122 位是通过伪随机数生成,随机性很强,几乎不可能重复。
  • 其随机字符取值范围包括 0-9 和 a-f,版本号位固定为 4,变种位的高两位固定为 10
  • UUID 广泛应用于数据库、分布式系统、资源标识、请求追踪等场景,确保对象的全球唯一性。

通过理解 UUID.randomUUID() 的实现原理和应用场景,开发者可以在各种需要唯一标识符的场景中更好地使用这一工具。

希望对你有所帮助,若有问题欢迎指正~😊

相关文章:

Java基础——`UUID.randomUUID()` 方法详细介绍

这里写自定义目录标题 UUID.randomUUID() 方法详细介绍1. 概述2. UUID 的结构与格式UUID 的 128 位结构划分: 3. UUID.randomUUID() 方法详解3.1 方法签名3.2 使用示例3.3 生成原理3.4 随机数生成的范围3.5 随机字符的取值范围 4. UUID 的版本与特性4.1 UUID 版本 4…...

前端面试常见手写代码题【详细篇】

文章目录 前言:防抖节流函数柯里化函数组合instanceof 实现实现new操作符的行为深拷贝继承实现:手写Promise数组中常见函数的实现 前言: 在前端面试中,经常会遇到要求手写的代码的题目,主要是考察我们的编程能力、和对…...

当代最厉害的哲学家改名大师颜廷利:北京、上海、广州和深圳房价精准预测

在2024年国庆节期间,北京、上海、广州和深圳的房地产市场异常活跃。作为山东济南籍的国际易学权威颜廷利教授,连续收到了这些大城市客户的感谢信和电话。 来自北京的王先生在信中写道:“非常感谢颜廷利教授这几年来对我们的鼓励和支持。在经历…...

MySQL常用指令码

本文精心挑选了一系列MySQL指令码,助你提升资料库效率、解决常见问题,让你的资料储存体验更加高效、可靠。 常用功能指令码 1.汇出整个资料库 mysqldump - u 使用者名称- p – default - character - set latin1 资料库名>汇出的档名(资料库预设编…...

OpenHarmony(鸿蒙南向开发)——轻量系统内核(LiteOS-M)【扩展组件】

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… C支持 基本概念 C作为目前使用最广泛的编程语言之一,…...

官方ROM 免费下载! 王者归来! 华为秘盒media Q M310(续)

最近在捣鼓电视盒子, 前帖讨论了如何拯救华为华为秘盒media Q M310, 详情请点击这里! https://blog.csdn.net/weixin_62598385/article/details/142658048 CSDN上有精简版的M310 ROM下载, 但是我点不进去, 要收年费&am…...

【Docker】05-Docker部署前端项目

1. nginx.conf worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/json;sendfile on;keepalive_timeout 65;server {listen 18080;# 指定前端项目所在的位置location / {root /usr/share/nginx…...

SQL进阶技巧:如何优化NULL值引发的数据倾斜问题?

目录 0 场景描述 1 问题分析 1.1 问题剖析 1.2 解决方案 2 小结 0 场景描述 实际业务中有些大量的null值或者一些无意义的数据参与到计算作业中,表中有大量的null值,如果表之间进行join操作,就会有shuffle产生,这样所有的null值都会被分配到一个reduce中,必然产生数…...

【09】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Class类基础全解(属性、方法、继承复用、判断)

序言: 本文详细讲解了关于我们在程序设计中所用到的class类的各种参数及语法。 笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法整理为笔记分享出来,如有代码错误或笔误,欢迎指正。 B站黑马的课程链接&am…...

快速提升波段交易技能:4种实用策略分享

每个交易员的交易偏好是各不相同的,有人偏爱短线交易的迅速反应,有人钟情于中长线的稳健布局,还有人则热衷于波段交易的灵活操作。我们经常探讨短线与中长线的策略,但你了解波段交易的策略吗? 波段交易是什么&#xf…...

LeetCode 11 Container with Most Water 解题思路和python代码

题目: You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]). Find two lines that together with the x-axis form a container, such that the co…...

【深度学习】损失函数

损失函数(Loss Function)是机器学习和深度学习模型中的一个核心概念,它用于衡量模型的预测输出与真实标签之间的差异。通过优化(最小化)损失函数,模型可以不断调整其内部参数,提升预测性能。不同…...

力扣 中等 46.全排列

文章目录 题目介绍题解 题目介绍 题解 代码如下&#xff1a; class Solution {List<List<Integer>> res new ArrayList<>();// 存放符合条件结果的集合List<Integer> path new ArrayList<>();// 用来存放符合条件结果boolean[] used; // 标记…...

LabVIEW机床加工监控系统

随着制造业的快速发展&#xff0c;机床加工的效率与稳定性成为企业核心竞争力的关键。传统的机床监控方式存在效率低、无法远程监控的问题。为了解决这些问题&#xff0c;开发了一种基于LabVIEW的机床加工监控系统&#xff0c;通过实时监控机床状态&#xff0c;改进生产流程&am…...

第五届智能设计国际会议(ICID 2024)

文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网&#xff1a;https://ais.cn/u/vEbMBz提交检索&#xff1a;EI Compendex、IEEE Xplore、Scopus大会时间&#xff1a;2024年10月25-27日大会地点&#xff1…...

厨房用品分割系统源码&数据集分享

厨房用品分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-DCNV3&#xff06;yolov8-seg-AFPN-P345等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al ln…...

【HTTPS】深入解析 https

我的主页&#xff1a;2的n次方_ 1. 背景介绍 在使用 http 协议的时候是不安全的&#xff0c;可能会出现运营商劫持等安全问题&#xff0c;运营商通过劫持 http 流量&#xff0c;篡改返回的网页内容&#xff0c;例如广告业务&#xff0c;可能会通过 Referer 字段 来统计是…...

Axios 快速入门

什么是Ajax Ajax 是一种通过 JavaScript 发送异步请求的技术&#xff0c;它的核心是使用 XMLHttpRequest 对象来与服务器交换数据。这种方式较为繁琐&#xff0c;因为需要手动处理请求状态和响应&#xff0c;并且编写的代码往往比较冗长。 相较之下&#xff0c;Axios 是一个基于…...

LabVIEW提高开发效率技巧----调度器设计模式

在LabVIEW开发中&#xff0c;针对多任务并行的需求&#xff0c;使用调度器设计模式&#xff08;Scheduler Pattern&#xff09;可以有效地管理多个任务&#xff0c;确保它们根据优先级或时间间隔合理执行。这种模式在需要多任务并发执行时特别有用&#xff0c;尤其是在实时系统…...

python之认识变量

1、变量 1.1、定义 字面意思来看&#xff0c;会发生改变的量称为变量。 相反的&#xff0c;如果有一个不会发生改变的量&#xff0c;它应该称为不变量&#xff0c;即常量。 1.2、引入变量的原因 主要是为了方便程序员动态的管理、操控数据。 1.3、变量的三要素 名称 类型…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...