我是一名编码和 Java 专家。我现在正在学习 Hashtable。
我在这里遇到的困难是将 ArrayList 连接到另一个 ArrayList 的索引之一。 我想要实现的简单图像(图像) 我很难编写代码
class HashTable {
private int size;
private ArrayList<Pair> hashTable;
Pair Pair;
// Constructor
public j(int m) {
Pair = null;
size = m;
hashTable = new ArrayList<>(m);
for (int i = 0; i < m; i++) {
// hashTable.add(null);
hashTable.add(Pair);
}
}
private static class Pair {
Integer key;
Integer value;
public Pair(Integer key, Integer value) {
this.key = key;
this.value = value;
}
}
private int addressOfList(Integer key) {
int index = Math.floorMod(key, size);
return index;
}
public void insert(Integer key, Integer value) {
int index = addressOfList(key);
Pair existingPair = hashTable.get(index);
Pair newPair = new Pair(key, value);
ArrayList<Pair> listAtIndex = new ArrayList<>();
// if there is not jet a Pair in hashTabel.get(index)
if(existingPair == null) {
//connect listAtIndex to an index
hashTable.set(index, newPair); // here is where im having problems
listAtIndex.add(0, newPair);
}else if(newPair.key.equals(existingPair.key)) {
listAtIndex.add(0, newPair);
}
}
}
因此,如果我解释我的代码,我想将
listAtIndex
与 hashTable
中的索引之一连接起来。
所以我首先开始写插入方法
hashTable.set(index, listAtIndex);
但是当然有一个语法错误,因为 set-Method 中的第二个参数需要是一个对象(如果我清楚的话..)
有人可以帮助我吗?
您的代码以及您尝试创建的逻辑中存在很多问题。我浏览了代码并试图理解
您基本上是在尝试使用 List 创建一个
Map<T,V>
。
此外,您尝试在您的情况下实现哈希函数,它的
addressOfList
也是错误的。更好的功能是Objects.hash(key)
。
此外,在构造函数中,您使用 null 元素初始化
list
。没有必要这样做。
for (int i = 0; i < m; i++) {
// hashTable.add(null);
hashTable.add(Pair);
}
此外,您正在创建一个本地列表,在函数调用结束后使用 newPair
listAtIndex.add(0, newPair);
初始化它后,该列表将丢失其引用,这是毫无意义的。