Java 生成与float[]中的值长度相同的唯一ID/哈希的算法
有很多二维几何体的float[]数组,我试图将这些顶点列表缓存到一些关键点贴图中 出于(读取)性能的原因,长或int键应该比字符串键快Java 生成与float[]中的值长度相同的唯一ID/哈希的算法,java,algorithm,math,libgdx,Java,Algorithm,Math,Libgdx,有很多二维几何体的float[]数组,我试图将这些顶点列表缓存到一些关键点贴图中 出于(读取)性能的原因,长或int键应该比字符串键快 objectmap<key,float[]> 对于float[]中的相同值,每个float[]值生成的键应该是唯一的,即 arrAKey = generate from float[]{-10,10,20,20,30,30} arrBKey = generate from float[]{-10,10} arrCKey = generate
objectmap<key,float[]>
对于float[]中的相同值,每个float[]值生成的键应该是唯一的,即
arrAKey = generate from float[]{-10,10,20,20,30,30}
arrBKey = generate from float[]{-10,10}
arrCKey = generate from float[]{10,-10}
arrAKey!=arrBKey
arrBKey!=arrCKey
arrAKey!=arrCKey
**编辑
为什么java.util.Arrays.hashCode(float[])无法工作?您可以使用Cantor配对函数或Szudzik方法。看看这个。对于两个以上的数字,您可以使用配对函数的配对。任何哈希或校验和算法都会给您一个稳定的结果(对于相同的内容,总是相同的答案)。算法的质量将决定您有多少冲突(返回相同结果的不同内容)。您可以使用标准,但它确实需要字节,而不是浮点 我认为您使用的建议将返回您想要的结果(根据给定数组中的内容确定地计算出一个相对稳定的int)
请注意,如果您开始缓存顶点数组,那么如果这些数组在任何情况下发生了变异或更改,则需要格外小心。(缓存的条目将需要失效,您可能会共享您不想共享的突变。)修复了这个问题,因为float[]键中的相同值应该是相同的。我们是否可以对float数组进行排序?哈哈哈,然后我想你明白了:)散列码对于不同的对象不一定是唯一的——不同的对象可能有相同的散列码。因此,如果假设散列码是唯一的,那么程序可能不会始终正常工作。
arrAKey = generate from float[]{-10,10,20,20,30,30}
arrBKey = generate from float[]{-10,10}
arrCKey = generate from float[]{10,-10}
arrAKey!=arrBKey
arrBKey!=arrCKey
arrAKey!=arrCKey