您好,登錄后才能下訂單哦!
如何進(jìn)行java在hashmap初始化時(shí)賦初值過程的解析,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
Java中的HashMap是一種常用的數(shù)據(jù)結(jié)構(gòu),一般用來做數(shù)據(jù)字典或者Hash查找的容器。
一般我們初始化并賦初值是這樣做的:
HashMap<String, Object> map = new HashMap<>();map.put("name", "yanggb"); map.put("lover", "huangq");
但是有時(shí)候我們會(huì)想在一個(gè)表達(dá)式中完成初始化并賦初值的操作:
HashMap<String, Object> map = new HashMap<>() { { put("name", "yanggb"); put("lover", "huangq"); }};
這里用了雙括號(hào)【{{}}】來初始化,使代碼簡(jiǎn)潔易讀。第一層括弧實(shí)際是定義了一個(gè)匿名內(nèi)部類 (Anonymous Inner Class),第二層括弧實(shí)際上是一個(gè)實(shí)例初始化塊 (Instance Initializer Block),這個(gè)塊在內(nèi)部匿名類構(gòu)造時(shí)被執(zhí)行。這種寫法的好處很明顯,就是一目了然。但是這種寫法可能導(dǎo)致這個(gè)對(duì)象串行化失敗的問題。
其一,因?yàn)檫@種方式是匿名內(nèi)部類的聲明方式,所以引用中持有著外部類的引用。所以當(dāng)串行化這個(gè)集合時(shí),外部類也會(huì)被不知不覺的串行化,而當(dāng)外部類沒有實(shí)現(xiàn)Serialize接口時(shí),就會(huì)報(bào)錯(cuò)。
其二,在上面的例子中,其實(shí)是聲明了一個(gè)繼承自HashMap的子類,然而有些串行化方法,例如要通過Gson串行化為json,或者要串行化為xml時(shí),類庫(kù)中提供的方式,是無(wú)法串行化Hashset或者HashMap的子類的,也就導(dǎo)致了串行化失敗。解決辦法是重新初始化為一個(gè)HashMap對(duì)象【new HashMap(map);】,這樣就可以正常進(jìn)行初始化了。
另外要注意的是,這種使用雙括號(hào)進(jìn)行初始化的語(yǔ)法在執(zhí)行效率上要比普通的初始化寫法要稍低。
最后,這個(gè)使用雙括號(hào)進(jìn)行初始化的語(yǔ)法同樣適用于ArrayList和Set等集合。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。