ダブルハッシュを使用して文字列キーをハッシュテーブルにハッシュしようとしています。私は次のようなことをしました:
protected int getIndex(String key) {
int itr = 0,
size = this.values.length,
index1,
index2,
index = 0;
do {
// do double hashing to get index for curr [itr] (iteration)
index1 = Math.abs(key.hashCode()) % size;
index2 = size - ((key + key + "#!@").hashCode() % size); # trying very hard to eliminate clash, but still fails ... TA and AT gets index 2 when size = 5
index = (index1 + (itr * index2)) % size;
// if itr > set threshold, exit
itr++;
if (itr > 200) {
index = -1;
break;
}
// once index found, exit loop
} while (index > 0 && this.keys[index] != null && !this.keys[index].equals(key));
return index;
}
主要部分は、後の最初の3行do
です。ダブルハッシュを使用すると、衝突の可能性がなくなるはずだと言えますか?size
ハッシュテーブルの一意キーの可能な合計値です