我想知道将UUID转换为唯一整数的最简单方法是什么?我尝试使用哈希码,但有人告诉我如果使用哈希码它并不总是唯一的。
那么最简单的方法是什么呢?哈希码是否唯一?
我想知道将UUID转换为唯一整数的最简单方法是什么?我尝试使用哈希码,但有人告诉我如果使用哈希码它并不总是唯一的。
那么最简单的方法是什么呢?哈希码是否唯一?
由于UUID是128位,而int只有32位,因此您将遇到问题。 您只能接受冲突的风险并尝试将其强行缩小到较小的空间(hashCode
可能是一种不错的方法),或者找到其他替代方案(直接使用UUID
,映射到BigInteger
- 在不知道原因的情况下很难判断)。
如何创建一个应用程序唯一的整数?
如果需要即使在重启后或应用程序被聚集的情况下仍保持唯一,可以使用数据库序列。
如果只需要在运行时保持唯一,可以使用静态的AtomicInteger。
编辑(添加示例):
public class Sequence {
private static final AtomicInteger counter = new AtomicInteger();
public static int nextValue() {
return counter.getAndIncrement();
}
}
用法:
int nextValue = Sequence.nextValue();
这是线程安全的(不同的线程将始终接收到不同的值,并且不会丢失任何值)
您可以将uuid转换为BigInteger并保持其唯一性。
BigInteger big = new BigInteger(uuid, 16);