我想编写一个实用工具,将提供给我在Java中比较独特的ID。从随机数的东西相当简单,像x比特从时间戳+ y位。

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

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

    ...

    return id;
}

奖金

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

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

有帮助吗?

解决方案

刚夹了位就不需要:

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

其他提示

你所要做的是创建一个哈希函数,结合两个长值代入单个长值。在这种情况下,一致性哈希函数的将是极为重要的,因为在碰撞创建的唯一ID值是不可接受的。但是,如果可以的散列值比较,以先前创建的标识符,则碰撞可以通过直到没有碰撞发生时修改所述散列解决。

例如,可以采取所述时间戳,并执行异或(使用这个^经营者在Java中)与随机值。如果检测到碰撞,再加入一到的结果。

如果在同一个JVM独特之处是不够那么这样的事情应该做的工作。

public class UniqueID {
  static long current= System.currentTimeMillis();
  static public synchronized long get(){
    return current++;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top