私はこの興味深いトピック (IMO) についてかなり多くのことを読んできました。しかし、私は1つのことを完全には理解していません:
辞書のサイズは、その容量を増加させています (最も近い素数に倍増) 素数に (再割り当ての場合) : 理由:
int index = hashCode % [Dictionary Capacity];
- GreatestCommonFactor がで
[Dictionary Capacity]
あるため、素数がここで使用されていることがわかります。これは衝突を避けるのに役立ちます。1
加えて
私は実装の多くのサンプルを見てきましたGetHashCode()
:
以下は、Jon Skeet のサンプルです。
public override int GetHashCode()
{
unchecked
{
int hash = 17;
// Suitable nullity checks etc, of course :)
hash = hash * 23 + field1.GetHashCode();
hash = hash * 23 + field2.GetHashCode();
hash = hash * 23 + field3.GetHashCode();
return hash;
}
}
理解できない :
質問
素数 は :との生成の両方で使用され ますか?
Dictionary capacity
getHashCode
上記のコードでは、戻り値が素数ではない可能性が高いため [間違っていたら訂正してください]
- による乗算
23
GetHashCode()
各フィールドの値の追加。
例: (11,17,173 は素数)
int hash = 17;
hash = hash * 23 + 11; //402
hash = hash * 23 + 17; //9263
hash = hash * 23 + 173 //213222
return hash;
213222 は素数ではありません。
また、次のような数学規則はありません。
(not a prime number) + (prime number) = (prime number)
または
(not a prime number) * (prime number) = (prime number)
または
(not a prime number) * (not a prime number) = (prime number)
それで、私は何が欠けていますか?