HashMapのソースコードを調べて、いくつか質問があります。PUTメソッドは、キーと値を取得し、
- キーのハッシュコードのハッシュ関数。
前の手順で取得したハッシュを使用して、このペアのバケットの場所を計算します
public V put(K key, V value) { int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); ..... } static int hash(int h) { h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4); } static int indexFor(int h, int length) { return h & (length-1); }
例:
- サイズ10のHashMapを作成します。
- put(k、v)を3回呼び出し、これらの3つがバケットloc 7、8、および9を占めると想定します。
- プット4番目のK、Vペアを呼び出すと、次のようになります
- hash()はkey.hashcode()で呼び出され、ハッシュが計算されます
- indexForはハッシュに基づいて計算されます
質問:
- 4番目のk、vの計算されたバケット位置が既存の境界外にある場合はどうなりますか?場所11と言いますか?
よろしくお願いしますAkh