2012-08-06 10 views
7

私はMapを研究していましたが、私は同じキーを意図的に2回追加すると地図のサイズは変わらないことがわかりました。この背後にある技術的な理由は何ですか?取得するためのマップで同じキーを2回追加する

Map map=new HashMap();//HashMap key random order. 
     map.put("Amit","Java"); 
     map.put("Amit","Java"); 

コード...

System.out.println("There are "+map.size()+" elements in the map."); 
     System.out.println("Content of Map are..."); 
     Set s=map.entrySet(); 
     Iterator itr=s.iterator(); 
     while(itr.hasNext()) 
     { 
      Map.Entry m=(Map.Entry)itr.next(); 
      System.out.println(m.getKey()+"\t"+m.getValue()+"\t"+ m.hashCode()); 
      } 

私が得る結果は:

There are 1 elements in the map. 
Content of Map are... 
Amit Java 3943477 
+8

それは地図の全体点です。 – Pshemo

答えて

22

Map's contractのでキーは一意でなければならないということです。したがって、新しい値を既存のキーに関連付けると、既存のエントリの値が上書きされ、新しいエントリは作成されません。

キーを値にマップするオブジェクト。マップに重複キーを含めることはできません。各キーは最大でも1つの値にマップできます。

またMap#put() javadoc(強調鉱山)を確認することができます。

このマップ(任意のオペレーション)内の指定されたキーに指定された値を関連付けます。 マップに以前にキーのマッピングが含まれていた場合は、古い値が指定された値に置き換えられます。は、(マップMはm.containsKey(k)がtrueを返す場合にのみ鍵kのマッピングを含むと言われている。)

+0

http://docs.oracle.com/javase/7/docs/api/java/util/Map.html –

+0

@ assylias ..このルールは、ツリーマップなのかどうかにかかわらず、すべての形式のマップに適用されます。 ! – user1579492

+0

このルールが適用されない場合、有効な 'Map'実装ではありません。あ、はい。 –

0

新しい鍵は、次に、既存のキーのいずれかと同じである場合マップの値が上書きされます。

2

標準のJavaマップでは、キーごとに1つの値しか指定できません。値をコレクションにすることができます。したがって、キーごとに複数の値を効果的に格納できます。

マップ内に複数の同一のキーが必要な場合は、さまざまな解決策があります。たとえば、Guava Multimapを参照してください。

関連する問題