最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中直接初始化HashMap的方法實(shí)現(xiàn)

 更新時(shí)間:2025年06月27日 11:09:44   作者:1010n111  
在Java編程中,HashMap 是常用的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)鍵值對,有時(shí)我們需要在創(chuàng)建 HashMap 的同時(shí)就初始化一些固定的、不會(huì)改變的值,然而,Java并沒有像某些動(dòng)態(tài)語言那樣的直接字面量初始化語法,所以本文給大家介紹了Java中直接初始化HashMap的方法,需要的朋友可以參考下

Java中直接初始化HashMap的方法

技術(shù)背景

在Java編程中,HashMap 是常用的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)鍵值對。有時(shí)我們需要在創(chuàng)建 HashMap 的同時(shí)就初始化一些固定的、不會(huì)改變的值。然而,Java并沒有像某些動(dòng)態(tài)語言那樣的直接字面量初始化語法,因此需要通過一些特定的方式來實(shí)現(xiàn)。

實(shí)現(xiàn)步驟

所有版本

若只需單個(gè)鍵值對,可使用 Collections.singletonMap("key", "value")。

Java 9及更高版本

Java 9引入了一些工廠方法,簡化了 Map 的創(chuàng)建:

  • Map.of:適用于最多10個(gè)元素的情況。
Map<String, String> test1 = Map.of(
    "a", "b",
    "c", "d"
);
  • Map.ofEntries:適用于任意數(shù)量元素的情況。
import static java.util.Map.entry;    
Map<String, String> test2 = Map.ofEntries(
    entry("a", "b"),
    entry("c", "d")
);

注意,上述方法創(chuàng)建的 Map 是不可變的。若需要可變的 Map,可以進(jìn)行復(fù)制,如 mutableMap = new HashMap<>(Map.of("a", "b"));。同時(shí),鍵和值都不能為 null

Java 8及以下版本

  • 使用匿名子類的初始化器
Map<String, String> myMap = new HashMap<String, String>() {{
    put("a", "b");
    put("c", "d");
}};

不過,匿名子類可能會(huì)引入一些不必要的行為,例如生成額外的類,增加內(nèi)存和磁盤空間消耗以及啟動(dòng)時(shí)間;在非靜態(tài)方法中,它會(huì)持有創(chuàng)建方法所在對象的引用,導(dǎo)致外部類對象在創(chuàng)建的 Map 對象仍被引用時(shí)無法被垃圾回收。

  • 使用函數(shù)進(jìn)行初始化
Map<String, String> myMap = createMap();

private static Map<String, String> createMap() {
    Map<String,String> myMap = new HashMap<String,String>();
    myMap.put("a", "b");
    myMap.put("c", "d");
    return myMap;
}

使用第三方庫(如Guava)

Guava的 ImmutableMap 可以實(shí)現(xiàn)類似字面量的簡潔初始化:

  • 對于最多5個(gè)鍵值對的情況:
Map<String, String> test = ImmutableMap.of("k1", "v1", "k2", "v2");
  • 對于更多鍵值對的情況,使用構(gòu)建器:
Map<String, String> test = ImmutableMap.<String, String>builder()
    .put("k1", "v1")
    .put("k2", "v2")
    ...
    .build();

需要注意的是,Guava的 ImmutableMap 實(shí)現(xiàn)與Java的 HashMap 實(shí)現(xiàn)不同,它是不可變的,并且不允許 null 鍵和值。

Java 8使用Stream和Collectors

import static java.util.stream.Collectors.toMap;
import java.util.AbstractMap.SimpleEntry;

Map<String, String> myMap = Stream.of(
         new SimpleEntry<>("key1", "value1"),
         new SimpleEntry<>("key2", "value2"),
         new SimpleEntry<>("key3", "value3"))
        .collect(toMap(SimpleEntry::getKey, SimpleEntry::getValue));

這種方法的優(yōu)點(diǎn)是不會(huì)創(chuàng)建匿名類。

最佳實(shí)踐

  • 若使用Java 9及以上版本,優(yōu)先使用 Map.ofMap.ofEntries 方法,因?yàn)樗鼈兒啙嵡夷鼙WC代碼的可讀性和性能。
  • 若需要使用第三方庫,Guava的 ImmutableMap 是一個(gè)不錯(cuò)的選擇,特別是在需要不可變 Map 的場景下。
  • 避免過度使用匿名子類初始化,因?yàn)樗赡軙?huì)帶來不必要的性能開銷和內(nèi)存占用。

常見問題

  • 匿名子類初始化的問題:匿名子類會(huì)生成額外的類,增加內(nèi)存和磁盤空間消耗以及啟動(dòng)時(shí)間,還可能導(dǎo)致內(nèi)存泄漏。
  • 不可變 Map 的修改問題:使用 Map.ofImmutableMap 創(chuàng)建的 Map 是不可變的,若嘗試修改會(huì)拋出異常。
  • Collectors.toMapnull 值問題Collectors.toMap 依賴于 Map.merge,不允許 null 值,否則會(huì)拋出 NullPointerException。若需要處理 null 值,可以使用自定義收集器。
Map<String, String> myMap = Stream.of(
         new SimpleEntry<>("key1", "value1"),
         new SimpleEntry<>("key2", (String) null),
         new SimpleEntry<>("key3", "value3"),
         new SimpleEntry<>("key1", "value1updated"))
        .collect(HashMap::new,
                (map, entry) -> map.put(entry.getKey(),
                                        entry.getValue()),
                HashMap::putAll);

到此這篇關(guān)于Java中直接初始化HashMap的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java直接初始化HashMap內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java郵件通知工具類

    java郵件通知工具類

    這篇文章主要為大家詳細(xì)介紹了java郵件通知工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • java如何讀取Excel簡單模板

    java如何讀取Excel簡單模板

    這篇文章主要為大家詳細(xì)介紹了java如何讀取Excel簡單模板,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Java AES256加密解密示例代碼

    Java AES256加密解密示例代碼

    這篇文章主要介紹了Java AES256加密解密示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 詳解SpringBoot2 使用Spring Session集群

    詳解SpringBoot2 使用Spring Session集群

    這篇文章主要介紹了SpringBoot2 使用Spring Session集群,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-04-04
  • Struts2中ognl遍歷數(shù)組,list和map方法詳解

    Struts2中ognl遍歷數(shù)組,list和map方法詳解

    這篇文章主要介紹了Struts2中ognl遍歷數(shù)組,list和map方法詳解,需要的朋友可以參考下。
    2017-09-09
  • Java基礎(chǔ)題新手練習(xí)(一)

    Java基礎(chǔ)題新手練習(xí)(一)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • 詳解java一維數(shù)組及練習(xí)題實(shí)例

    詳解java一維數(shù)組及練習(xí)題實(shí)例

    在本篇文章里小編給大家整理了關(guān)于java一維數(shù)組及練習(xí)題的相關(guān)知識(shí)點(diǎn)和實(shí)例代碼,有需要的朋友們跟著學(xué)習(xí)下。
    2019-07-07
  • Java超詳細(xì)講解排序二叉樹

    Java超詳細(xì)講解排序二叉樹

    排序二叉樹的特點(diǎn)是一個(gè)父節(jié)點(diǎn)只能有左右兩個(gè)子節(jié)點(diǎn)、左節(jié)點(diǎn)的值比父節(jié)點(diǎn)要小、右節(jié)點(diǎn)的值要比父節(jié)點(diǎn)要大,難度并不大,但是得花時(shí)間來理解
    2022-06-06
  • Java內(nèi)部類的繼承(全)

    Java內(nèi)部類的繼承(全)

    這篇文章主要介紹了Java內(nèi)部類的繼承,大家都知道JAVA內(nèi)部類的構(gòu)造器必須連接指向其外圍類對象的引用,所以在繼承內(nèi)部類的時(shí)候,需要在導(dǎo)出類的構(gòu)造器中手動(dòng)加入對基類構(gòu)造器的調(diào)用,需要的朋友可以參考下
    2015-07-07
  • Java反射機(jī)制詳解

    Java反射機(jī)制詳解

    Java的反射機(jī)制是在運(yùn)行狀態(tài)中,對于任何一個(gè)類,都可以知道這個(gè)類的所有屬性和方法,對于任何一個(gè)對象,都可以調(diào)用它所有的方法和屬性,修改部分類型信息,這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對象方法的功能稱為Java的反射機(jī)制
    2022-09-09

最新評論

申扎县| 溆浦县| 奇台县| 合肥市| 迭部县| 炉霍县| 肇庆市| 仁化县| 丰宁| 图们市| 合肥市| 和硕县| 浠水县| 建宁县| 甘泉县| 衢州市| 栾城县| 临江市| 晋宁县| 丰城市| 左权县| 太康县| 拜泉县| 多伦县| 无棣县| 遵义县| 武功县| 普兰店市| 万山特区| 贵定县| 东乡族自治县| 北海市| 依兰县| 无极县| 镇远县| 玉门市| 新竹县| 察雅县| 湄潭县| 旅游| 武宣县|