我在Java中实现基本的HashTable数据结构,而不使用集合框架和数组。
我打算使用我将存储在数组中的引用的单个节点。
我这样做:
class Node {
private int data;
private String key;
private Node next;
// Other helper methods
}
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”的情况,它返回负哈希码,因此程序以异常终止。
是否有任何标准的散列算法可用于散列并广泛使用?我是为了学习而写作。
答案 0 :(得分:1)
您可以使用例如:
@Override
public int hashCode() {
return 31 * data + ((key == null) ? 0 : key.hashCode());
}
但您还需要实施equals
。