繁体   English   中英

用于为float []中的值生成相同的唯一ID /哈希的算法

[英]Algorithm for generating the same unique ID/Hash as long for values in float[]

对于很多具有2d几何形状的float []数组,我试图将这些顶点列表缓存到某些键控贴图中。

出于(读取)性能原因,具有long或int的键应该比字符串之一快。

objectmap<key,float[]> 

是否可以根据值创建int / long键?

keyForVertices = generateKeyFromVertices(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方法。 检查此答案 对于两个以上的数字,您可以使用配对功能。

任何哈希或校验和算法都将为您提供稳定的结果(对于相同的内容始终提供相同的答案)。 算法的质量将决定您有多少个冲突(返回相同结果的不同内容)。 您可以使用标准的Java CRC32校验和,但它确实需要字节而不是浮点数。

我认为您对使用Arrays.hashCode(float[])将完全返回您想要的内容(根据给定数组中的内容确定地计算出的相对稳定的int)。

请注意,如果您开始缓存顶点数组,则无论如何都要对这些数组进行突变或更改,都需要格外小心。 (缓存的条目将需要无效,并且您可能最终共享了您本不想共享的突变。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM