このコードは、ハッシュコードを計算して別の値を法とする剰余を計算しています。 ハッシュコードが負かもしれないので、剰余演算の結果も負かもしれません。
計算結果が負ではないことを確認したいなら、コードを変更する必要があるかもしれません。
除数が2の累乗であることがわかっているなら、代わりにビット演算を使用できます (すなわち、x.hashCode()%n
の代わりに x.hashCode()&(n-1)
を使用してください)。
これはおそらく、剰余を計算するより高速です。
除数が2の累乗であるということをわかっていないなら、剰余演算の結果の絶対値を取得してください (すなわち、Math.abs(x.hashCode()%n)
)。