我被要求使用2D数组创建哈希表。我做了它在我的put方法中有什么问题我的理解2D数组必须有两个循环才能实现这里是我的put代码我不能插入任何东西。
public class Array2DHashTable<K, V> {
// here is my variable and my constructor.
// Array2DHashTable(int tableSize){ table = (Entry[][]) new HashEntry[tableSize] [COLUMN_SIZE];
//numItems = 0; }
public void put(K key, V value){
int hash= key.hashCode() % ROW_SIZE;
int seenIt = hash;
int j;
for(j=0;j<COLUMN_SIZE;j++){
while(table[hash][j] != null && table[hash][j].getKey().equals(key)){
hash= ( hash+1)%ROW_SIZE;
if(hash == seenIt) return;
}
}
table[hash][j] = new HashEntry(key,value);
numItems++;
}
}
class HashEntry<K, V> implements Entry<K, V> {
// all the variables and gutter and setter
}
答案 0 :(得分:0)
如果找到相同的密钥(而不是更改哈希值),您可能希望覆盖该值。以下是执行该操作的代码。
public void put(K key, V value){
int hash= key.hashCode() % ROW_SIZE;
int seenIt = hash;
int j;
for(j=0;j<COLUMN_SIZE;j++){
while(table[hash][j] != null){
if (table[hash][j].getKey().equals(key)) // overwrite the value
hash=(hash+1)%ROW_SIZE;
}
}
table[hash][j] = new HashEntry(key,value);
numItems++;
}