2014-04-29 42 views
0

我最近測試了HashMap,並且偶然發現了一個有趣的問題。我有一個數組a3,我已經設置了一些任意的值。然後我把這個數組放入一個HashMap實例映射中。使用HashMap put()

我的問題是,當我分配一個對象實例put(「a3」,a3)的值時,我似乎無法打印出實例的地址。

例如:

HashMap<Object, Object> map = new HashMap<Object, Object>(); 
int[] a3 = new int[] {1, 2, 3, 4}; 

map.put("a3", a3); 

當我打電話的System.out.println(map.put( 「A3」,A3),我提供的地址,在內存

但是,如果。我創建一個對象實例,然後嘗試打印出該實例我得到空。

Object copy = map.put("a3", a3); 
System.out.println(copy); 

運行上面的部分給了我一個null值。

爲什麼這兩個看起來相同的陳述給了我不同的結果?

回答

0

閱讀HashMap的API文檔。如果映射中沒有與您要插入的值相匹配的值,則返回空值。

http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#put%28K,%20V%29

所以,如果「A3」在地圖上已經存在,則你會得到回報,但由於它不那麼你回來空。 「a3」已放入地圖,但未打印地圖,則從put()打印返回。

+0

我知道HashMap中沒有值,但我的問題是爲什麼HashMap中沒有值。 put()方法不在HashMap中放置一個值嗎?因此,如果Object實例被分配給HashMap中的任何值,那麼System.out.println()不應該打印出HashMap中任何地址的地址? – Delfino

+0

這就是我要說的。哈希映射中有一個值,但put()不會返回哈希映射。不要做'System.out.println(copy)',做'System.out.println(map.get(「a3」))',你會看到它的存在 – JamesENL

+0

我的解釋是否有意義? – JamesENL

0

由於@James_Massey說,如果你查閱官方文件,你可以看到,put()方法的返回值是:

如果鍵沒有任何 測繪與關鍵,或空關聯的先前值。 (一個空返回也可以表示地圖 先前與鍵關聯爲空。)