生活随笔
收集整理的這篇文章主要介紹了
MAP的get与containskey
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前提是:Map可以出現(xiàn)在k與v的映射中,v為null的情況, 所以containsKey出現(xiàn)更加必要。
map.get(key)是得到的key所對應(yīng)的value值。
map.contains(key)是判斷是否存在這個key,即判斷是否存在指定的鍵名key。
Map集合允許值對象為null,并且沒有個數(shù)限制,所以當(dāng)get()方法的返回值為null時,可能有兩種情況,一種是在集合中沒有該鍵對象,另一種是該鍵對象沒有映射任何值對象,即值對象為null。因此,在Map集合中不應(yīng)該利用get()方法來判斷是否存在某個鍵,而應(yīng)該利用containsKey()方法來判斷,例如下面的例子。
下面的代碼首先創(chuàng)建一個由HashMap類實現(xiàn)的Map集合,并依次向Map集合中添加一個值對象為null和“馬先生”的映射;然后分別通過get()和containsKey()方法執(zhí)行這兩個鍵對象;最后執(zhí)行一個不存在的鍵對象。關(guān)鍵代碼如下:
?
[html]?view plaincopy
<span?style="font-size:18px;">import?java.util.HashMap;??import?java.util.Map;????public?class?TestMapKey?{??????public?static?void?main(String[]?args)?{??????????Map<Integer,?String>?map?=?new?HashMap<Integer,?String>();??????????map.put(220180,?null);??????????map.put(220181,?"馬先生");??????????System.out.println("get()方法的返回結(jié)果:");??????????System.out.print("------?"?+?map.get(220180));??????????System.out.print("????"?+?map.get(220181));??????????System.out.println("????"?+?map.get(220182));??????????System.out.println("containsKey()方法的返回結(jié)果:");??????????System.out.print("------?"?+?map.containsKey(220180));??????????System.out.print("????"?+?map.containsKey(220181));??????????System.out.println("????"?+?map.containsKey(220182));??????}??}??</span>??
?
執(zhí)行上面的代碼,在控制臺將輸出如下信息:
get()方法的返回結(jié)果:
------ null ? ?馬先生 ? ?null
containsKey()方法的返回結(jié)果:
------ true ? ?true ? ?false
?
結(jié)論:Map集合中不應(yīng)該利用get()方法來判斷是否存在某個鍵,因為可能map的key值存在但value的值為null
今天被這個坑了,記錄一下
?
附加注意:
[java]?view plaincopy
Map<String,?Object>?channelMap?=?new?HashMap<String,?Object>();??channelMap.put("1",?"online");??Map<String,?Object>?map?=?new?HashMap<String,?Object>();??map.put("vt",?1);??if(channelMap.containsKey(map.get("vt")))?{??????System.out.print("success");??}?else?{??????System.out.print("fail");??}??輸出為fail
感覺問題在于containsKey里面的值類型為Object,而channelMap的key類型是String,類型不能自動轉(zhuǎn)換,所以就匹配失敗。
代碼改為
[java]?view plaincopy
Map<String,?Object>?channelMap?=?new?HashMap<String,?Object>();??channelMap.put("1",?"online");??Map<String,?Object>?map?=?new?HashMap<String,?Object>();??map.put("vt",?1);??if(channelMap.containsKey(map.get("vt")+""))?{??????System.out.print("success");??}?else?{??????System.out.print("fail");??}?? 輸出為success,結(jié)果正常
總結(jié)
以上是生活随笔為你收集整理的MAP的get与containskey的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。