Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从多个数字标识创建唯一的数字标识_Java_Algorithm - Fatal编程技术网

Java 从多个数字标识创建唯一的数字标识

Java 从多个数字标识创建唯一的数字标识,java,algorithm,Java,Algorithm,从多个数字64位ID开始生成唯一64位ID的好算法是什么?例如: 输入:[2,9875,0,223568,…]随机64位ID的列表 输出:一个唯一的64位数字ID,对于给定的输入必须相同 我正在寻找一种避免身份冲突的方法 对于这个不清楚的问题,我深表歉意。如果您想了解更多信息,旧问题将对您有用,但您可以尝试以下方法: java.util.UUID.randomUUID().hashCode() private static final AtomicLong COUNTER = new Ato

从多个数字64位ID开始生成唯一64位ID的好算法是什么?例如:

输入:[2,9875,0,223568,…]随机64位ID的列表

输出:一个唯一的64位数字ID,对于给定的输入必须相同

我正在寻找一种避免身份冲突的方法


对于这个不清楚的问题,我深表歉意。

如果您想了解更多信息,旧问题将对您有用,但您可以尝试以下方法:

java.util.UUID.randomUUID().hashCode()
private static final AtomicLong COUNTER = new AtomicLong(System.currentTimeMillis()*100000);
如果以前的解决方案在您的案例中不起作用,请尝试以下方法:

java.util.UUID.randomUUID().hashCode()
private static final AtomicLong COUNTER = new AtomicLong(System.currentTimeMillis()*100000);

或算法(GitHub链接)。

如果速度无关紧要,那么:

在md5算法中输入所有ID,而不是简单地使用

a) 前64位或
b) 最后64位或
c) 前64位异或后64位


如果速度很重要

那么:

步骤1:对所有64位ID的字节重新排序(对于输入的每个64位ID,以固定但不同的顺序排列)。(如果值不是随机分布的,这可能会有所帮助)

步骤2:对所有重新排列的64位id进行异或,以获得新的64位id



如果您没有关于64位输入ID范围或值分布的额外信息,则无法以“聪明的”/“最佳的”方式避免冲突。因为无论你提出什么,你总会发现一组会导致冲突的输入。

请阅读如何使你的问题变得清晰一些更多的约束条件会很有用。例如,如果您知道所有ID的长度最多为10个字符,并且您不关心生成的ID的长度,那么您可以连接:000000000 2000009750000000223568您知道多个数字64位ID的值的分布情况吗?@MrSmith42不,在这种情况下,它们是随机的,我将更新问题