Java Map.get()返回指定鍵所映射的值
Java 集合類中的 Map.get() 方法返回指定鍵所映射的值。如果此映射不包含該鍵的映射關(guān)系,則返回 null。
語法:
get(Object key))
參數(shù)說明:
key:是指定的 Map 集合中的鍵名。
典型應(yīng)用
本示例使用 HashMap 類創(chuàng)建 Map 集合對象,并向集合中添加指定的內(nèi)容,然后使用 get 方法獲取指定鍵名的鍵值對象。代碼如下:
public static void main(String[] args){ Map map = new HashMap(); //定義Map集合對象 map.put("apple","新鮮的蘋果"); //向集合中添加對象 map.put("computer","配置優(yōu)良的計(jì)算機(jī)"); 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值輸出 } }
運(yùn)行結(jié)果如下:
在Map集合中鍵名apple的鍵值是: 新鮮的蘋果
java中map的get方法key值類型的一個問題
描述: 在HashMap中取值的時候,key值是0,用hashMap.get(0),卻無論如何也取不到value,調(diào)試的時候仔細(xì)一看,key值的類型是Long型,然后傳0L,即順利取到值了。
分析:
Map<Long,String> map = new HashMap<>(); map.put(0L, "string"); map.get(0);
代碼大概就是上面這個樣子。
在調(diào)用get方法的時候,會進(jìn)入
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),那么進(jìn)入get方法的時候,入?yún)ey值依然是0(Long),那么很順利的會在getEntry方法體內(nèi),通過相關(guān)的hash和比較操作(具體也比較簡單,不是重點(diǎn)不多說)返回預(yù)期的value值。
但是,如果key值是圖中的0(Integer),那么get方法被調(diào)用時的入?yún)⒕秃芷婀至?,如下?/p>
正如圖中調(diào)試信息一樣,key值為java/lang/Integer$IntegerCache,Integer內(nèi)部的一個私有類,緩存-127~128的數(shù)據(jù)(這個也不是重點(diǎn)),重點(diǎn)是這個方法不知道被誰調(diào)用了兩次,而且Key值都是這個值,直到第三次的時候,key值為0(Integer),當(dāng)然了,即使這樣也自然找不到預(yù)期的value值了,因?yàn)樵趃etEntry方法內(nèi),進(jìn)行equals時,畢竟是Integer類型,是和key值比較不上的。
現(xiàn)在想不明白的是,這個get方法前兩次被誰調(diào)用的,希望哪位大佬知道,留個言解釋下。
我用javap命令查看了下,并沒有弄明白(主要是小弟道行太淺):
另外,我覺得可能key值是0的原因,然后用3000作為key值(put,get)試了下,結(jié)果還是這樣。
然后,我將代碼改成這樣:
Map<Integer,String> map = new HashMap<>(); map.put(0, "string"); map.get(0);
就不會出現(xiàn)上面截圖的情況,第一次進(jìn)入get方法(也只進(jìn)入一次),key值就是0(Integer)。
然后猜測了下可能和Integer的緩存有關(guān),這樣試了下:
斷點(diǎn)打在第二次get方法時,這時候,進(jìn)入get方法體內(nèi)時,key值就是預(yù)期的0(Integer),當(dāng)然,這是為什么,我還是不明白。
希望知道原因的前輩可以解答下,若日后搞明白了,我再來解釋。
到此這篇關(guān)于Java Map.get()返回指定鍵所映射的值的文章就介紹到這了,更多相關(guān)Java Map.get返回值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java編碼輔助工具M(jìn)apstruct用法詳解
- MapStruct處理Java中實(shí)體與模型間不匹配屬性轉(zhuǎn)換的方法
- Java HashSet(散列集),HashMap(散列映射)的簡單介紹
- Java中具有映射關(guān)系的容器:數(shù)組和Map的區(qū)別說明
- Java底層基于鏈表實(shí)現(xiàn)集合和映射--集合Set操作詳解
- Java實(shí)現(xiàn)鼠標(biāo)模擬與鍵盤映射
- 解析本地方法映射Java層的數(shù)據(jù)類型
- javaMybatis映射屬性,高級映射詳解
- java 中MyBatis注解映射的實(shí)例詳解
- Java MapStruct解了對象映射的毒
相關(guān)文章
Spring XML Schema擴(kuò)展機(jī)制的使用示例
所謂整合,即在Spring的框架下進(jìn)行擴(kuò)展,讓框架能無縫的與Spring工程配合使用。Spring設(shè)計(jì)了良好的擴(kuò)展的機(jī)制,本文將對Spring的擴(kuò)展方法及原理進(jìn)行簡單介紹。2021-05-05SpringBoot+Response如何統(tǒng)一返回result結(jié)果集
這篇文章主要介紹了SpringBoot+Response如何統(tǒng)一返回result結(jié)果集,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05Java利用遞歸算法實(shí)現(xiàn)查詢斐波那契數(shù)
今天小編就為大家分享一篇關(guān)于Java利用遞歸算法實(shí)現(xiàn)查詢斐波那契數(shù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12SpringBoot實(shí)戰(zhàn):Spring如何找到對應(yīng)轉(zhuǎn)換器優(yōu)雅使用枚舉參數(shù)
這篇文章主要介紹了SpringBoot實(shí)戰(zhàn)中Spring是如何找到對應(yīng)轉(zhuǎn)換器優(yōu)雅的使用枚舉參數(shù),文中附有詳細(xì)的實(shí)例代碼有需要的朋友可以參考下,希望可以有所幫助2021-08-08Java中使用異或運(yùn)算符實(shí)現(xiàn)加密字符串
這篇文章主要介紹了Java中使用異或運(yùn)算符實(shí)現(xiàn)加密字符串,本文直接給出實(shí)現(xiàn)代碼,以及運(yùn)算結(jié)果加密實(shí)例,需要的朋友可以參考下2015-06-06Idea打包springboot項(xiàng)目沒有.original文件解決方案
這篇文章主要介紹了Idea打包springboot項(xiàng)目沒有.original文件解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07