PNS*_*PNS 9 java hash md5 hashcode sha
实现类似方法的最快和更强大(就唯一性而言)的方法是什么
public abstract String hash(String[] values);
Run Code Online (Sandbox Code Playgroud)
该values[]阵列具有100到1,000个成员,每个成员具有几十个字符,并且该方法每次需要在不同的values[]阵列上运行大约10,000次/秒.
是应该使用StringBuilder缓冲区构建长字符串,然后在缓冲区内容上调用哈希方法,还是继续为每个字符串调用哈希方法values[]?
显然,需要至少64位的散列(例如,MD5)来避免冲突,但是在相同的质量下,是否有更简单,更快的方法可以做到?
例如,怎么样
public String hash(String[] values)
{
long result = 0;
for (String v:values)
{
result += v.hashCode();
}
return String.valueOf(result);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*nik 10
由于其线性属性,绝对不要使用普通加法,但您可以稍微修改您的代码以实现非常好的色散.
public String hash(String[] values) {
long result = 17;
for (String v:values) result = 37*result + v.hashCode();
return String.valueOf(result);
}
Run Code Online (Sandbox Code Playgroud)
Gir*_*san 10
下面是使用 Java 7 中提供的 Objects 类的简单实现。
@Override
public int hashCode()
{
return Objects.hash(this.variable1, this.variable2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10693 次 |
| 最近记录: |