生成long类型的UUID

时间:2010-12-25 08:17:46

标签: java uuid uniqueidentifier

请给我示例代码,以便在不使用时间戳的情况下在java中生成UUID long类型。

谢谢

3 个答案:

答案 0 :(得分:20)

真正的UUID是128位。长是64位。

这不仅仅是迂腐。 UUID代表通用唯一标识符。

established UUID schemes的“通用唯一性”基于:

  • 编码MAC地址和时间戳,
  • 编码DNS名称和时间戳的哈希,或
  • 使用122位随机数......这个数字足够大,以至于碰撞的概率非常小。

对于64位,根本没有足够的位用于“通用唯一性”。例如,生日悖论意味着如果我们有许多计算机生成随机的64位数字,那么潜在可检测到的碰撞的概率就足以引起关注。

现在,如果您只想要一个UID(而不是UUID),那么任何64位序列生成器都可以完成这项工作,只要您采取措施防止重复序列。 (如果序列重复,则ID在时间上不是唯一的;即,随着时间的推移,给定的ID可能表示不同的实体。)

答案 1 :(得分:7)

你看过java.util.UUID吗?

答案 2 :(得分:2)

如果您只想要一个简单的唯一长度,您可以使用AtomicLong.incrementAndGet()。这不使用时间戳,但每次启动时都会重置为0,并且在JVM中不是唯一的。

不使用时间戳的要求是什么? UUID使用时间戳。 (amoungst其他的东西)