尝试更好地理解哈希表的链接。寻求一个哈希值的简单表,只将一个整数与哈希值相关联。以下是有问题的示例代码......
/* hash string value return int */
public int hashFunction(String D) {
char[] Thing = D.toCharArray();
for(int i=0; i < Thing.length; i++){
index += Thing[i]; }
return index % TABLE_SIZE;
}
/* hash string value return void */
public void hashFunction(String D) {
char[] Thing = D.toCharArray();
for(int i=0; i < Thing.length; i++){
index += Thing[i];}
int hash = index % TABLE_SIZE;
if(table[hash] == null){
table[hash] = new HashEntry( Level, Value );
}
else{
table[hash].setNext(nd);
}
}
/* miscellaneous code snippet */
if(table[hash] == null){
table[hash] = new HashEntry();
}
else if (Data.compareTo("VAR") == 0) {
Data = inFile.next();
char[] Thing = Data.toCharArray();
for(int i=0; i < Thing.length; i++){
hash += Thing[i];}
hash = hash % TABLE_SIZE;
hm.setIntoHashTable(hash);
Data = inFile.next();
if(Data.compareTo("=") == 0) {
Data = inFile.next();
int value = Integer.parseInt(Data);
hm.getIntoHashTable(he.setValue(value));
}
}
答案 0 :(得分:2)
当索引中发生冲突时会发生链接。
让我们假设你有一个TABLE_SIZE = 10
现在您必须存储字符串abc
,因此您将哈希值设为4
现在,当您要存储字符串cba
时,您最终会得到相同的哈希4
现在要将cba
存储在同一索引中,您将在索引4
创建并存储一个List。
列表将包含abc
和bca
。此列表称为chain
,并且在同一哈希中存储多个值的过程称为Chaining
。
伪代码看起来像:
if(table[hash] == null)
table[hash] = new ArrayList<HashEntry>();//APPEND ON TO THE LOCATION ALREADY THERE!
table[hash].add(new HashEntry());
该表将声明为:
@SuppressWarnings("unchecked")
List<HashEntry>[] table = new List[TABLE_SIZE];
您可能必须禁止警告,因为数组和泛型不顺利。