-3

为 char 数组定义哈希码方法的最佳方法。有没有更好的方法来实现我们自己的 hascode() 方法来最小化碰撞?

char arr1[]={'a','b','c'};
char arr2[]={'b','a','c'};
char arr3[]={'c','a','b'};

int hashcode() {
   int p=31;
   int n=arr1.length;
   int hash=1;
   for(int i=0;i<n;i++) {
       hash=31*hash+(int)arr1[i];
   }
   return hash;
}
4

2 回答 2

1

这在很大程度上取决于您的数据通常如何彼此不同。

您可以编写此哈希码函数:

return arr.Length;

如果您的大多数阵列具有不同的大小,它可能非常适合。

或者,如果您的数组通常具有完全不同的内容,您可以使用前两项。

注意:循环整个数组并做一些比比较另一个数组的值更复杂的事情是没有意义的。为什么?因为哈希码仅用于性能优化。所以它应该比Equals. 并Equals比较所有值。

当数组大小不同时,Equals不会循环。相反,它在比较后立即返回Length。尝试在哈希码函数中击败它。

于 2018-10-04T11:06:06.450 回答
-1

如果您有一个包含字符数组的对象并且您想要覆盖 hashCode() 那么您可以使用它的方法:

java.util.Arrays.hashCode()
于 2018-10-04T10:52:17.850 回答