Java 可以生成多少个唯一ID

Java 可以生成多少个唯一ID,java,uuid,Java,Uuid,我正在使用下面的代码创建一个8个字符(包括数字和字母数字字符)的唯一Id 请帮助..[可能的字符数]^[生成集id的长度]-非常简单的数学 就你而言: 36^8=282110907456[可能的字符数]^[生成集id的长度]-非常简单的数学 就你而言: 36^8=282110907456(26+10)^8=2821109907456(26+10)^8=2821109907456本质上,您可以生成的字符串总数为368 使用(使用位字符串)解释此定理: 您有8个字符的位字符串,需要填充,请从36个字

我正在使用下面的代码创建一个8个字符(包括数字和字母数字字符)的唯一Id


请帮助..

[可能的字符数]^[生成集id的长度]
-非常简单的数学

就你而言:


36^8=282110907456
[可能的字符数]^[生成集id的长度]
-非常简单的数学

就你而言:


36^8=282110907456
(26+10)^8=2821109907456

(26+10)^8=2821109907456

本质上,您可以生成的字符串总数为368

使用(使用位字符串)解释此定理:

您有8个字符的位字符串,需要填充,请从36个字符中选择1个:

__  __  __  __  __  __  __  __  
36  36  36  36  36  36  36  36  (characters a -- z, 0-- 9)

因此,您有
36*36*36*36*36*36*36*36
=368=
282110907456
总id。

本质上,您可以生成的字符串总数为368

使用(使用位字符串)解释此定理:

您有8个字符的位字符串,需要填充,请从36个字符中选择1个:

__  __  __  __  __  __  __  __  
36  36  36  36  36  36  36  36  (characters a -- z, 0-- 9)
因此,您有
36*36*36*36*36*36*36*36
=368=
282110907456
总id。

请看这里:

部分
重复排列
。理论上,给定一组
n
元素(即
bitsArray
的长度)和排列的长度(即
uuidString
字符串)为
r
,您将能够生成n^r唯一排列(即您的情况下的uuid)

在您的例子中,n=36(26个字母和10个数字)和r=8(uuid的长度为8),因此:

36^8 = 2821109907456
请看这里:

部分
重复排列
。理论上,给定一组
n
元素(即
bitsArray
的长度)和排列的长度(即
uuidString
字符串)为
r
,您将能够生成n^r唯一排列(即您的情况下的uuid)

在您的例子中,n=36(26个字母和10个数字)和r=8(uuid的长度为8),因此:

36^8 = 2821109907456

有多少个唯一ID?大约一百万个。这取决于您使用的随机数生成器的质量。如果使用该随机数生成器,则只能生成一个标识符。如果它是一个低质量的线性同余生成器(对于较低的位,它的随机性非常差),那么最终得到的值可能比理论最大值(368=约28000亿)少256倍。然而,由于您生成的每个ID都需要读取以前生成的ID的整个列表,我怀疑您的计算机将在达到一百万个标识符之前摆脱困境


有多少个UUID?零。您的代码依赖于内部黑名单来避免冲突,这意味着使用您的方法生成UUID的多台计算机有相当合理的机会以冲突告终(避免冲突是使用UUID的首要目的)

有多少个唯一ID?大约一百万个。这取决于您使用的随机数生成器的质量。如果使用该随机数生成器,则只能生成一个标识符。如果它是一个低质量的线性同余生成器(对于较低的位,它的随机性非常差),那么最终得到的值可能比理论最大值(368=约28000亿)少256倍。然而,由于您生成的每个ID都需要读取以前生成的ID的整个列表,我怀疑您的计算机将在达到一百万个标识符之前摆脱困境


有多少个UUID?零。您的代码依赖于内部黑名单来避免冲突,这意味着使用您的方法生成UUID的多台计算机有相当合理的机会以冲突告终(避免冲突是使用UUID的首要目的)

阵列的长度为36。然后使用方法
r.nextInt(长度)

这意味着随机数的最大值是36,从0到35。所以最多可以得到8个索引36。

数组的长度是36。然后使用方法
r.nextInt(长度)

这意味着随机数的最大值是36,从0到35。因此,最多可以得到8个索引36。

错误。反过来说。如果存在
n
可能的字符,则每个字符将可能的数量乘以
n
。因此,组合的数量是
n^[生成id的长度]
@luqui:这不正是我写的(也许你在我编辑我的文章时写了你的评论,最初我像你说的那样写了,但我几乎马上就改正了)错误的吗。反过来说。如果存在
n
可能的字符,则每个字符将可能的数量乘以
n
。因此,组合的数量是
n^[生成id的长度]
@luqui:这不正是我写的吗(也许你在我编辑我的文章时写了你的评论,最初我像你说的那样写了,但我几乎立即更正了它)