Java 使用linkedlist进行散列
我正在尝试使用链接实现一个哈希表,除了代码中已有的库之外,我没有其他库,但是我被卡住了。出于某种原因,100行整数的数据没有被添加到列表中,就像打印时看到的那样,除了第二个位置的一行,我认为我需要一个toString方法来处理它。关于如何使这项工作起作用,我有什么建议或解决办法吗 提前谢谢 主+数组声明:Java 使用linkedlist进行散列,java,hashtable,Java,Hashtable,我正在尝试使用链接实现一个哈希表,除了代码中已有的库之外,我没有其他库,但是我被卡住了。出于某种原因,100行整数的数据没有被添加到列表中,就像打印时看到的那样,除了第二个位置的一行,我认为我需要一个toString方法来处理它。关于如何使这项工作起作用,我有什么建议或解决办法吗 提前谢谢 主+数组声明: static LinkedList<Node> hashTable[] = new LinkedList[100]; static class Node { int v
static LinkedList<Node> hashTable[] = new LinkedList[100];
static class Node {
int value;
int key;
}
public static void main(String[] args) throws FileNotFoundException {
File f = new File("Ex5.txt");
Scanner scan = new Scanner(f);
if (f.exists() == false) {
System.out.println("File doesn't exist or could not be found.");
System.exit(0);
}
while (scan.hasNextInt()) {
int n = scan.nextInt();
insert(1, hashFunction(n));
}
for (int i = 0; i < 100; ++i) {
System.out.println(hashTable[i]);
}
}
您应进行两项更改: 您应该使用hashfunction获取密钥并保持值不变 从insert中删除索引=键%100,而使用传递的键 穿越 希望这有帮助 -------------编辑----------
要在链表中打印实际值,请重写节点类中的toString方法,并返回键值的字符串表示形式。您正在向所有insert调用传递相同的键1。您可能打算传递不同的键。很抱歉,我忘了说,我不确定如何使用它来散列所有值。您正在散列键而不是值,并且一个键只能在映射中出现一次,因此多次添加同一个键将覆盖该值。最后,映射中只有一个键和一个值。因此,如果正在读取的int不是值,那么是什么?我想我已经设法让它工作了,但是如何为linkedlist实现toString方法呢?当我试图打印哈希表的每一行时,输出如下所示,只是它们位于单独的行上:null null[Ex5$Node@38af3868,Ex5$Node@77459877]空[Ex5$Node@5b2133b1][Ex5$Node@72ea2f77,Ex5$Node@33c7353a,Ex5$Node@681a9515][Ex5$Node@3af49f1c]
public static void insert(int key, int value) {
int index = key % 100;
LinkedList<Node> items = hashTable[index];
if (items == null) {
items = new LinkedList<>();
Node item = new Node();
item.key = key;
item.value = value;
items.add(item);
hashTable[index] = items;
} else {
for (Node item : items) {
if (item.key == key) {
item.value = value;
return;
}
}
Node item = new Node();
item.key = key;
item.value = value;
items.add(item);
}
}
public static int hashFunction(int value) {
int hashKey = value % 100;
return hashKey;
}