gpt4 book ai didi

java - Java Arrays.hashCode 的碰撞强度

转载 作者:行者123 更新时间:2023-11-30 01:46:23 30 4
gpt4 key购买 nike

Arrays.hashCode 方法中使用的哈希机制防止冲突的强度有多强?两个不同的数组(例如,double)使用这些方法计算出精确的哈希值的可能性有多大?

最佳答案

Arrays.hashCode(double[])指定返回包含表示相同数值的 Double 值的 List 的等效值。

List.hashCode依次用一个相当简单的算法指定:

int hashCode = 1;
for (E e : list)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());

一般来说,与素数相乘对于通用哈希函数来说是一个很好的做法,但它距离加密强哈希函数还很远。

这意味着虽然在一般(实际上是随机的)情况下不太可能发生冲突,但如果您可以影响(或选择)hashCode,则通常可以很容易地构建它们列表中的项目。

作为一个构建的示例,请考虑以下两个语句:

System.out.println(Arrays.hashCode(new double[] {4.753E-321d}));
System.out.println(Arrays.hashCode(new double[] {4.9E-324d, 4.9E-324d}));

尽管数组明显不同,但它们都将输出 993。

关于java - Java Arrays.hashCode 的碰撞强度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57784989/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com