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

Java中用于实现哈希表的广泛使用的哈希算法?,java,hash,hashtable,hash-function,Java,Hash,Hashtable,Hash Function,我正在用Java实现一个基本的哈希表数据结构,而不使用集合框架和数组 我打算使用将其引用存储在数组中的单个节点 我是这样做的: 定义一个节点: 创建一个数组,该数组将保存对预先创建的节点对象的引用: 为了获得哈希代码,我使用Java的内置方法->哈希代码 它似乎工作得很好,但是对于第二个键的情况,它返回一个负哈希代码,因此程序终止时会出现异常 我的问题是: 是否有任何标准的散列算法,我可以用于散列和广泛使用?我写作是为了学习 例如,您可以使用: @Override public int hash

我正在用Java实现一个基本的哈希表数据结构,而不使用集合框架和数组

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

我是这样做的:

定义一个节点: 创建一个数组,该数组将保存对预先创建的节点对象的引用: 为了获得哈希代码,我使用Java的内置方法->哈希代码

它似乎工作得很好,但是对于第二个键的情况,它返回一个负哈希代码,因此程序终止时会出现异常

我的问题是:
是否有任何标准的散列算法,我可以用于散列和广泛使用?我写作是为了学习

例如,您可以使用:

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

但是您还需要实现equals。

哈希代码被广泛使用。如果hashCode返回负值,您可以使用Math.abs从中获取正值。@Rohan:谢谢您的回答。除了hashCode之外,还有其他哈希算法可以使用吗?Java HashMap和HashSet类在内部使用hashCode。我不知道有任何其他标准方法用于创建哈希代码值。您可以随时查找包含一个的外部库。@Rohan hashCode不是一个算法,它只是访问某些哈希实现的一种方法。@奇怪的是,我要说的是,没有最好的解决方案。您希望在散列范围内很好地分布值,同时希望计算速度更快。这是一个折衷方案,它还取决于您输入到其中的内容的分布。如果您想制作哈希映射之类的内容,则最有可能不包括数据。@Henry yes,如果它是可变的。键也是如此,如果它是可变的。如果可能的话,最好将密钥/数据设置为最终值。
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...
}
@Override
public int hashCode() {
    return 31 * data + ((key == null) ? 0 : key.hashCode());
}