使用链表进行散列

我正在尝试使用链接来实现哈希表,并且不使用任何库(除了我的代码中已有的库),但我陷入了困境。由于某种原因,数据(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]);

    }

}

插入功能:


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;

}


互换的青春
浏览 105回答 1
1回答

繁星淼淼

您应进行两项更改:您应该使用哈希函数来获取键并保持原样值。从插入中删除index=key%100,而是使用传递的key进行遍历。希望这可以帮助。- - - - - - - - - - - - - 编辑 - - - - - - - - - -要打印链接列表中的实际值,请重写 Node 类中的 toString() 方法并返回键值的字符串表示形式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java