UUID 到唯一整数 ID?

2022-08-31 13:22:28

我想知道将UUID转换为唯一整数的最简单方法是什么?我尝试过使用哈希代码,但人们告诉我,如果我使用哈希代码,它并不总是唯一的?

那么最简单的方法是什么呢?哈希代码是否唯一?


答案 1

您将遇到问题,因为UUID是128位,而int只有32位。您要么必须接受碰撞的风险,并尝试将其捏造到较小的空间(可能是这样做的好方法),要么找到替代方案(直接使用,映射到 - 不知道原因,很难分辨)hashCodeUUIDBigInteger


答案 2

回答如何拥有唯一的应用程序范围的整数:

如果它即使在重新启动后也需要是唯一的,或者如果您的应用程序是群集的,则可以使用数据库序列。

如果它只需要在运行时是唯一的,请使用静态 AtomicInteger

编辑(示例已添加):

public class Sequence {

  private static final AtomicInteger counter = new AtomicInteger();

  public static int nextValue() {
    return counter.getAndIncrement();
  }
}

用法:

int nextValue = Sequence.nextValue();

这是线程安全的(不同的线程将始终接收不同的值,并且没有值将“丢失”)