为了账号安全,请及时绑定邮箱和手机立即绑定

使用链表进行散列

使用链表进行散列

互换的青春 2023-08-04 17:32:19
我正在尝试使用链接来实现哈希表,并且不使用任何库(除了我的代码中已有的库),但我陷入了困境。由于某种原因,数据(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;}
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

您应进行两项更改:

  1. 您应该使用哈希函数来获取键并保持原样值。

  2. 从插入中删除index=key%100,而是使用传递的key进行遍历。

希望这可以帮助。

- - - - - - - - - - - - - 编辑 - - - - - - - - - -

要打印链接列表中的实际值,请重写 Node 类中的 toString() 方法并返回键值的字符串表示形式。


查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信