如何使用UUID生成唯一的正Long

我需要为数据库主键列生成唯一的Long ID。

我以为我可以使用

但是有时它会产生一些负数,这对我来说也是个问题。

是否有可能仅从UUID生成正数长?会有数十亿个条目,因此我希望每个生成的键必须唯一。

回答:

UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE

之所以起作用,是因为当您按位与1进行操作时,它允许按原样传递同一位数字;当您按位与0进行操作时,它将阻止该位,结果为0。现在,二进制中的Long.MAX_Value为

0111111111111111111111111111111111111111111111111111111111111111

这是0,然后是63 1s(总共是64位,在Java中很长)

因此,当您按位&数字X与该数字相同时,您将得到相同的数字X,但最左边的位现在变为零。这意味着您仅更改了该数字的符号,而没有更改该值。

以上是 如何使用UUID生成唯一的正Long 的全部内容, 来源链接: utcz.com/qa/435873.html

回到顶部