我想编写一个实用程序,它将在Java中为我提供一个相对唯一的ID。非常简单,比如来自时间戳的x位+来自随机数的y位。
那么,我将如何实现以下方法:
long getUniqueID()
{
long timestamp = System.currentTimeMillis();
long random = some random long
...
return id;
}
奖金
对于我可以用来形成我的ID的其他易于获取的信息的任何建议吗?
注意:我知道GUID,我知道Java有一个UUID类,但我不想要128位长的东西。
答案 0 :(得分:3)
只需剪掉你不需要的位:
return java.util.UUID.randomUUID().getLeastSignificantBits();
答案 1 :(得分:1)
您要做的是创建一个hash function,它将两个长值组合成一个长值。在这种情况下,散列函数的uniformity将是最重要的,因为创建的唯一ID值中的冲突是不可接受的。但是,如果您可以将哈希值与先前创建的标识符进行比较,则可以通过修改哈希值来解决冲突,直到不发生冲突为止。
例如,您可以使用时间戳并使用随机值执行exclusive-or(使用Java中的插入符^运算符)。如果检测到碰撞,则在结果中添加一个。
答案 2 :(得分:1)
如果同一JVM中的唯一性足够,那么这样的事情就可以完成。
public class UniqueID {
static long current= System.currentTimeMillis();
static public synchronized long get(){
return current++;
}
}