Java中广泛使用的哈希算法用于实现哈希表?

时间:2017-12-06 19:37:27

标签: java hash hashtable hash-function

我在Java中实现基本的HashTable数据结构,而不使用集合框架和数组。

我打算使用我将存储在数组中的引用的单个节点。

我这样做:

定义节点:

class Node {

    private int data;
    private String key;
    private Node next;
    // Other helper methods
}

创建一个数组,该数组将保留对预先创建的Node对象的引用:

public class MyHashTable {

    private Node[] nodeArray = new Node[100];

    public MyHashTable() {
        for(int i=0 ; i<100; i++) {
            nodeArray[i] = new Node();
        }
    }

    private int getIndex(String key) {
        long hashCode = key.hashCode();
        return  (int )hashCode%100;
    }

    // Other helper methods...
}

为了获取哈希码,我使用的是Java的内置方法 - &gt; hashCode()方法

它似乎工作正常,但是对于密钥为“second”的情况,它返回负哈希码,因此程序以异常终止。

我的问题是:

是否有任何标准的散列算法可用于散列并广泛使用?我是为了学习而写作。

1 个答案:

答案 0 :(得分:1)

您可以使用例如:

@Override
public int hashCode() {
    return 31 * data + ((key == null) ? 0 : key.hashCode());
}

但您还需要实施equals