您好,登錄后才能下訂單哦!
怎么在Java中使用Map.get()返回指定鍵所映射的值?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
Java是一門面向對象編程語言,可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序。
Java 集合類中的 Map.get() 方法返回指定鍵所映射的值。如果此映射不包含該鍵的映射關系,則返回 null。
語法:
get(Object key))
參數說明:
key:是指定的 Map 集合中的鍵名。
本示例使用 HashMap 類創建 Map 集合對象,并向集合中添加指定的內容,然后使用 get 方法獲取指定鍵名的鍵值對象。代碼如下:
public static void main(String[] args){ Map map = new HashMap(); //定義Map集合對象 map.put("apple","新鮮的蘋果"); //向集合中添加對象 map.put("computer","配置優良的計算機"); map.put("book","堆積成山的圖書"); Object get = map.get("apple"); //獲取指定鍵所映射的值 if(get instanceof String){ //判斷鍵值是否為String類型 String value = (String)get; //獲取指定的value值 System.out.println("在Map集合中鍵名apple的鍵值是:"+value); //將value值輸出 } }
運行結果如下:
在Map集合中鍵名apple的鍵值是: 新鮮的蘋果
描述: 在HashMap中取值的時候,key值是0,用hashMap.get(0),卻無論如何也取不到value,調試的時候仔細一看,key值的類型是Long型,然后傳0L,即順利取到值了。
分析:
Map<Long,String> map = new HashMap<>(); map.put(0L, "string"); map.get(0);
代碼大概就是上面這個樣子。
在調用get方法的時候,會進入
public V get(Object key) { if (key == null) return getForNullKey(); Entry<K,V> entry = getEntry(key); return null == entry ? null : entry.getValue(); }
如果key值是0L(Long),那么進入get方法的時候,入參key值依然是0(Long),那么很順利的會在getEntry方法體內,通過相關的hash和比較操作(具體也比較簡單,不是重點不多說)返回預期的value值。
但是,如果key值是圖中的0(Integer),那么get方法被調用時的入參就很奇怪了,如下:
正如圖中調試信息一樣,key值為java/lang/Integer$IntegerCache,Integer內部的一個私有類,緩存-127~128的數據(這個也不是重點),重點是這個方法不知道被誰調用了兩次,而且Key值都是這個值,直到第三次的時候,key值為0(Integer),當然了,即使這樣也自然找不到預期的value值了,因為在getEntry方法內,進行equals時,畢竟是Integer類型,是和key值比較不上的。
現在想不明白的是,這個get方法前兩次被誰調用的,希望哪位大佬知道,留個言解釋下。
我用javap命令查看了下,并沒有弄明白(主要是小弟道行太淺):
另外,我覺得可能key值是0的原因,然后用3000作為key值(put,get)試了下,結果還是這樣。
然后,我將代碼改成這樣:
Map<Integer,String> map = new HashMap<>(); map.put(0, "string"); map.get(0);
就不會出現上面截圖的情況,第一次進入get方法(也只進入一次),key值就是0(Integer)。
然后猜測了下可能和Integer的緩存有關,這樣試了下:
看完上述內容,你們掌握怎么在Java中使用Map.get()返回指定鍵所映射的值的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。