2013-12-12 36 views
10

我々はすべてのHashMapが1つのヌルキーと値のペアを可能に知っているように私は、HashMapのについて疑問を持って、私はこのように書いた場合は、ここで私の質問はHashMapは重複を許可しますか?

で、

m.put(null,null); 
m.put(null,a); 

それが(エラーがスローされますか例外)、またはそれが値を上書きするか、または退却の値は何になりますか?

+38

お試しください。 –

+3

CheckoutコレクションAPI。 Nullはキーにとって常に悪い選択です。だからあなたがしたいことをチェックしてください。 2つの等しいキーの場合、最初のonの値は現在の値に置き換えられます。 – Diversity

+0

確認:http://stackoverflow.com/questions/1669885/what-happens-when-a-duplicate-key-is-put-into-a-hashmap – Diversity

答えて

4

意味で重複を許可しません。あなたを追加することはできますが、このキーが既に値を持っているかどうかは気にしません。だから、つのキーため、現時点でそれは黙っnullキーのvalueをオーバーライドするだけつの値

があるでしょう。例外なし。

取得しようとすると、nullで最後に挿入された値が返されます。

これは、nullと任意のキーでのみではありません。

HashMap内の各キーは一意である必要があります

Map m = new HashMap<String, String>(); 
    m.put("1", "a"); 
    m.put("1", "b"); //no exception 
    System.out.println(m.get("1")); //b 
7

簡単な例を持っています。

「重複キーを追加する」とは、古い値(同じキーの場合はキーが一意でなければならない)は単に置き換えられます。 HashMap.put

このマップで指定されたキーに指定した値を関連付けます。マップに以前にキーのマッピングが含まれていた場合は、の古い値がに置き換えられます。

キーに関連付けられた以前の値を返します。キーのマッピングがなかった場合はnullを返します。限りヌルとして

:単一のヌルキーが許可されている(キーは一意である必要がありますよう)が、HashMapのは、ヌルの任意の番号を持つことができ、ヌルキーはNULL値を持つ必要はありません。 documentationあたり:

[.. HashMapの]許可がと[A]ヌルキーはnull。

ただし、ドキュメントが特定のキー/値のペアまたはnull /「」で無効にする必要がヌル/ nullの程度氏は述べていません。

8

コード例:

HashMap<Integer,String> h = new HashMap<Integer,String>(); 

h.put(null,null); 
h.put(null, "a"); 

System.out.println(h); 

出力:

{null=a} 

It overrides the value at key null。ハッシュマップのキーは、キーと同じであれば

16

ハッシュマップのタイプは、そのキーを上書き

map.put("1","1111"); 
map.put("1","2222"); 

出力

key:value 
1:2222 
3

HashMapの重複キーを許可していませんが、それはスレッドセーフではないですから、それは重複キーを発生する場合があります。 例:

while (true) { 
      final HashMap<Object, Object> map = new HashMap<Object, Object>(2); 
      map.put("runTimeType", 1); 
      map.put("title", 2); 
      map.put("params", 3); 
      final AtomicInteger invokeCounter = new AtomicInteger(); 

      for (int i = 0; i < 100; i++) { 
       new Thread(new Runnable() { 
        @Override 
        public void run() { 
         map.put("formType", invokeCounter.incrementAndGet()); 
        } 
       }).start(); 
      } 
      while (invokeCounter.intValue() != 100) { 
       Thread.sleep(10); 
      } 
      if (map.size() > 4) { 
// this means you insert two or more formType key to the map 
       System.out.println(JSONObject.fromObject(map)); 
      } 
     } 
関連する問題