1

我想编写一个实用程序,为我提供 Java 中相对唯一的 ID。一些非常简单的东西,比如时间戳中的 x 位 + 随机数中的 y 位。

那么,我将如何实现以下方法:

long getUniqueID()
{
    long timestamp = System.currentTimeMillis();
    long random = some random long

    ...

    return id;
}

奖金

对于我可以用来形成我的身份证的其他容易获得的信息有什么建议吗?

注意:我知道 GUID,我知道 Java 有一个 UUID 类,但我不想要 128 位长的东西。

4

3 回答 3

3

只需剪辑您不需要的位:

return java.util.UUID.randomUUID().getLeastSignificantBits();
于 2008-11-25T15:05:19.057 回答
1

您要做的是创建一个哈希函数,将两个长值组合成一个长值。在这种情况下,哈希函数的一致性将至关重要,因为创建的唯一 ID 值中的冲突是不可接受的。但是,如果您可以将散列值与先前创建的标识符进行比较,则可以通过修改散列来解决冲突,直到不发生冲突。

例如,您可以获取时间戳并对随机值执行异或(在 Java 中使用插入符号 ^ 运算符)。如果检测到碰撞,则将结果加一。

于 2008-11-25T15:05:07.963 回答
1

如果在同一个 JVM 中唯一就足够了,那么这样的事情应该可以完成。

public class UniqueID {
  static long current= System.currentTimeMillis();
  static public synchronized long get(){
    return current++;
    }
}
于 2008-11-25T22:27:56.837 回答