我正在用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);
}
答案 0 :(得分:-1)
您的代码归结为:
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);
}