哈希线性探测

问题描述 投票:0回答:1

我想做线性探测,我想输出线性探测之前和之后的结果,但是在线性探测之后我的密钥没有显示。

这是我的代码:

import java.util.*;

class practice {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        Hashtable<Integer, String> table = new Hashtable<>(10);

        System.out.println("How many students u want to enter: ");
        int numOfSt = sc.nextInt();

        for (int i = 1; i <= numOfSt; i++) {
            System.out.println("ID: ");
            int ID = sc.nextInt();

            System.out.println("Name: ");
            String name = sc.next();

            table.put(ID, name);
        }
        for (Integer key : table.keySet()) {
            System.out.println(key.hashCode() % 10 + "\t\t" + key + "\t\t" + table.get(key));
        }

        Hashtable<Integer, String> LinearProb = new Hashtable<>(10);

        for (Integer key : table.keySet()) {
            int index = key.hashCode() % 10;

            while (LinearProb.containsKey(index)) {
                index = (index + 1) % 10;
            }

            LinearProb.put(index, key + table.get(key));

        }

        for (Integer key : LinearProb.keySet()) {
            System.out.println(key + "\t\t" + key.hashCode() % 10 + "\t\t" + LinearProb.get(key));
        }
    }
}

我尝试修复线性探测后的输出

我想要这样的输出:

索引 身份证号码 姓名
2 212 安娜
:----------------------------:
2 712 索菲亚

但后来它给了我:

索引 身份证号码 姓名
2 2 安娜
:----------------------------:
3 3 索菲亚
java data-structures linear-probing
1个回答
0
投票

您似乎对 HashMap 的用途有些困惑。他们已经编写了线性探测。它内置于数据结构中。

如果你被布置作业并且必须编写哈希图,那么你必须编写自己的。使用内置的哈希图是不可接受的。

如果您想使用库,为什么要在已有的内容之上进行自己的线性探测,这比您正在编写的内容要优越得多?

尚不清楚您的意图,但是当您将两个项目放入哈希映射时,具有相同键的第二个项目将替换第一个项目。我想这就是你所看到的。

© www.soinside.com 2019 - 2024. All rights reserved.