2008-11-25 10 views
1

我想写一个实用程序,它将为我提供一个相对独特的Java编码。一些非常简单的事情,比如时间戳的x位+随机数的y位。如何将位组装成长整型以创建唯一ID?

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

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

    ... 

    return id; 
} 

BONUS

任何其他容易得到的信息,我可以用我的形成ID建议?

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

回答

3

就夹了位就不需要:

return java.util.UUID.randomUUID().getLeastSignificantBits(); 
1

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

例如,您可以采用时间戳并使用随机值执行exclusive-or(使用Java中的插入符号^运算符)。如果检测到碰撞,则向结果添加一个。

+0

有意详细说明一下吗? – carrier 2008-11-25 15:23:43

1

如果在同一个JVM独特就够了,然后这样的事情应该做的工作。

public class UniqueID { 
    static long current= System.currentTimeMillis(); 
    static public synchronized long get(){ 
    return current++; 
    } 
}