2012-03-20 9 views
0

下記のコードをご覧ください。上記ケースマップ店舗で以下のシナリオでhashmapがどのように動作しますか?

Map<Long,String> unsortMap = new HashMap<Long,String>(); 
unsortMap.put(new Long(123), "a"); 
unsortMap.put(new Long(123), "ab"); 

のみとAB。私の理解はキーと値のペアがバケットに格納されています。各バケットは一意の番号を持ち、キーのハッシュコードによって決定されます。上記のコードでは、両方のキーのハッシュコードが異なるため、hashmapはどのように内部的に動作しますか?

ありがとうございます!

答えて

4

Longの場合、数値が同じ場合、同じ値が返されるように、hashCodeメソッドがオーバーライドされます。実際には、source code内を調べ、方法はこれです:ハッシュマップのキーで

public int hashCode() { 
    return (int)(value^(value >>> 32)); 
} 
+0

こんにちはチューダー、あなたのおかげで:それはハッシュコードが 式の値であります応答。ここで私は2つの新しいオブジェクトを作成しています。各オブジェクトのハッシュコード(メモリの場所)が異なります。私は、ヒープ上に2つの異なるオブジェクトが作成されていると思っています。私を明確にしてください。 – user1016403

+0

はい、ハッシュマップがハッシュキーを計算するときはハッシュキーを計算するときと同じですので古いものに置き換えます – Parth

+0

Longクラスは 'hashCode()'メソッドをオーバーライドします。参照のメモリ位置は返されません。 – Perception

0

全体地図上で一意でなければなりません。同じキーに異なる値を挿入している場合、HashMapは新しい値で上書きされます。

1

あなたは以下のコードを実行した場合、あなたは彼らが異なるインスタンス(参照が等しくない)もののhascodeは、あなたの2つのlong型でも同じですが表示されます:

public static void main(String[] args) { 
    Long a = new Long(123); 
    Long b = new Long(123); 
    System.out.println(a.hashCode()); //123 
    System.out.println(b.hashCode()); //123 
    System.out.println(a == b); //false 
} 
関連する問題