Java でハッシュテールを実装しましたが、コードを最適化する必要があります。私は多くのループをしなければならないと思います。ループの数を「減らす」にはどうすればよいですか? 問題は、要素を削除すると、テーブルを再ハッシュする必要があり、delete() と put() の間にたてがみホップがあることです。これは学校の演習であるため、コード例は必要ありません。ガイダンスだけです:)
ありがとうございました
これが私の機能です:
public void put(String key, Character val) {
int hashValue = hash(key);
if(val == '\r'){
delete(key);
}
else {
while(keys[hashValue] != null) {
if(keys[hashValue].equals(key)) {
break;
}
hashValue = (hashValue + 1) % M ;
}
keys[hashValue] = key ;
vals[hashValue] = val;
N++;
}
}
public Character get(String key) {
int hashValue = hash(key);
while(keys[hashValue] != null) {
if(keys[hashValue].equals(key)){
return vals[hashValue];
}
hashValue = (hashValue+1) % M;
}
return null;
}
public void delete(String key) {
int hashValue = hash(key) ;
String tempkey;
Character tempval;
boolean deleted = false;
while(keys[hashValue] != null){
if(keys[hashValue].equals(key)){
keys[hashValue] = null;
vals[hashValue] = null;
deleted = true;
N--;
if(keys[(hashValue + 1) % M] == null){
break;
}
}
else if(deleted = true){
tempkey = keys[hashValue];
tempval = vals[hashValue];
keys[hashValue] = null;
vals[hashValue] = null;
N--;
put(tempkey, tempval);
}
hashValue = (hashValue +1) % M;
}
return;
}