我正在用java中的随机访问文件实现哈希,以处理冲突。我需要使用一种方法根据名称生成密钥,以尽量减少冲突。用我所拥有的方法,如果收入100条记录,我产生了95次碰撞。
注意,我使用的散列方法是除法或模法,输入数据字符串的长度为6。
这种方法是否有可能得到改进,或者有其他选择?
public int hashCode(String nombre ) {
int hash = 1;
hash = hash*31 + nombre.hashCode();
System.out.println("hsh " +hash);
return Math.abs(hash);
}发布于 2015-12-03 18:19:56
您的代码归结为:
hash = 31 + nombre.hashCode();如果您的字符串是相同的,那么您就会发生碰撞。
您应该将其更改为更有意义。
public int hashCode(String nombre ) {
int hash = new Random().nextInt(); // PLEASE NOTE YOU SHOULD NOT CREATE NEW RANDOM EVERY TIME. CREATE IT ONCE AND JUST USE nextInt()
hash = hash*31 + nombre.hashCode();
System.out.println("hsh " +hash);
return Math.abs(hash);
}https://stackoverflow.com/questions/34073287
复制相似问题