获得Java UUID.randomUUID冲突的机会有多大?

dan*_*els 39 java uuid

我需要在Java中创建一些唯一文件,我计划使用UUID.randomUUID生成它们的名称.有没有机会为此发生碰撞?我应该做一些像bellow os我不应该担心的事情吗?

Integer attemptsToGenerateUUID = 1;

while (true) {
    UUID fileUUID = UUID.randomUUID();

    if (fileDoesNotExistwith this UUID name) {
        save file;
        break;
    }

    attemptsToGenerateUUID += 1;

    if (attemptsToGenerateUUID > 64) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 93

根据维基百科,关于随机UUID中重复的概率:

只有在接下来的100年中每秒产生10亿UUID之后,仅创建一个副本的概率大约为50%.或者,换句话说,如果地球上的每个人拥有6亿UUID,则一次重复的概率约为50%.

我想同样的推理也适用于Java的UUID实现.所以不,你不应该担心这一点.

  • 那你是说还有机会吗? (176认同)
  • 啊,这更像是一个笑话......谢谢您的详细描述的回答! (20认同)
  • @Jack 是的,但它是天文数字低。 (11认同)
  • @ValerijDobler 很可能您在代码中发现了错误,而不是 uuid 冲突:) (6认同)
  • 显然,没有人玩强力球/乐透:) (3认同)
  • @Popeye 这不是一个愚蠢的问题!原理没有改变,UUID 的生成实际上是随机的,这意味着您可以将 UUID 的生成视为彼此独立的事件。换句话说,从不同的计算机创建 UUID 不会改变任何东西,发生冲突的可能性“极小”。事实上,这就是为什么分布式系统倾向于使用类似 UUID 的标识符,而不是需要锁定的全局顺序标识符。Google、Facebook 和其他大数据组织都使用类似的标识符(不过,也许它们的长度更长?) (2认同)