用随机访问文件java实现散列

时间:2015-12-03 18:14:10

标签: java hash

我正在用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);
}

1 个答案:

答案 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);
}