ビンのインデックスを取得するための次のコードを提供します。
private int getIndex(K key)
{
int hash = key.hashCode() % nodes.length;
if (hash < 0)
hash += nodes.length;
return hash;
}
ハッシュ値がテーブルのサイズよりも大きくならないようにするために、ユーザー提供のハッシュ関数の結果がテーブルの長さを法として使用されます。インデックスは負でない必要がありますが、左側のオペランド (ハッシュ値) が負の場合、モジュラス演算子 (%) は負の数を返すため、それをテストして非負にする必要があります。
hash
非常に大きな負の値であることが判明した場合hash += nodes.length
、サイクル内の追加には多くの処理が必要になる場合があります。
O(1)
そのためのアルゴリズムが必要だと思います(hash
値に関係なく)。
もしそうなら、どのようにそれを達成することができますか?