Java 使用linkedlist进行散列

Java 使用linkedlist进行散列,java,hashtable,Java,Hashtable,我正在尝试使用链接实现一个哈希表,除了代码中已有的库之外,我没有其他库,但是我被卡住了。出于某种原因,100行整数的数据没有被添加到列表中,就像打印时看到的那样,除了第二个位置的一行,我认为我需要一个toString方法来处理它。关于如何使这项工作起作用,我有什么建议或解决办法吗 提前谢谢 主+数组声明: static LinkedList<Node> hashTable[] = new LinkedList[100]; static class Node { int v

我正在尝试使用链接实现一个哈希表,除了代码中已有的库之外,我没有其他库,但是我被卡住了。出于某种原因,100行整数的数据没有被添加到列表中,就像打印时看到的那样,除了第二个位置的一行,我认为我需要一个toString方法来处理它。关于如何使这项工作起作用,我有什么建议或解决办法吗

提前谢谢

主+数组声明:

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;
}