我想做线性探测,我想输出线性探测之前和之后的结果,但是在线性探测之后我的密钥没有显示。
这是我的代码:
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 | 索菲亚 |
您似乎对 HashMap 的用途有些困惑。他们已经编写了线性探测。它内置于数据结构中。
如果你被布置作业并且必须编写哈希图,那么你必须编写自己的。使用内置的哈希图是不可接受的。
如果您想使用库,为什么要在已有的内容之上进行自己的线性探测,这比您正在编写的内容要优越得多?
尚不清楚您的意图,但是当您将两个项目放入哈希映射时,具有相同键的第二个项目将替换第一个项目。我想这就是你所看到的。