12
String内のJavaのhashCode()が31を乗数として使用するのはなぜですか?
Javaドキュメントによれば、オブジェクトのハッシュコードStringは次のように計算されます。 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] int算術を使用します。ここs[i]で、 は文字列のi番目の文字、文字列nの長さ、および^指数を示します。 31が乗算器として使用されるのはなぜですか? 乗数は比較的大きな素数でなければならないことを理解しています。では、なぜ29や37、あるいは97でもないのでしょうか。