为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;
}
答案 0 :(得分:0)
这在很大程度上取决于您的数据之间的区别。
您可以编写此哈希码功能:
use ConsoleTVs\Charts\Facades\Charts
如果大多数数组的大小不同,它可能会非常适合。
或者,如果您的数组通常具有完全不同的内容,则可以使用前两项。
注意:循环整个数组并执行比比较另一个数组的值更复杂的操作没有任何意义。为什么?因为哈希码仅用于性能优化。因此,它应该比return arr.Length;
更快。然后Equals
比较所有值。
当数组的大小不同时,Equals
将不会循环。相反,它在比较Equals
之后立即返回。尝试在哈希码功能中击败它。
答案 1 :(得分:-1)
如果您有一个包含字符数组的对象,并且想要覆盖hashCode(),则可以对其使用方法:
java.util.Arrays.hashCode()