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

java17創(chuàng)建map的方式有幾種

 更新時(shí)間:2025年12月04日 10:52:27   作者:Such丶安好  
Java17提供了多種創(chuàng)建Map的方式,主要分為可變和不可變Map兩種類型,本文就來介紹一下java17創(chuàng)建map的方式有幾種,感興趣的可以了解一下

在 Java 17中,創(chuàng)建 Map的方式有多種,主要取決于你使用的是 不可變 Map(Immutable Map)、可變 Map(Mutable Map),以及你希望使用 傳統(tǒng)方式、Java 9+ 引入的工廠方法,還是 Stream / Collectors 工具類構(gòu)建等。

下面我將為你全面梳理 Java 17 中創(chuàng)建 Map 的常見方式,并分類說明,包括 可變與不可變、傳統(tǒng)與現(xiàn)代寫法。

? 一、創(chuàng)建可變 Map(Mutable Map)(可增刪改)

指的是創(chuàng)建后可以 繼續(xù)修改(put、remove 等操作)的 Map,通常是 HashMap、LinkedHashMap、TreeMap等。

1.最傳統(tǒng)、最常用的方式:使用new HashMap<>()等

// 創(chuàng)建一個(gè)可變的 HashMap
Map<String, Integer> map1 = new HashMap<>();
map1.put("apple", 1);
map1.put("banana", 2);

// LinkedHashMap(保持插入順序)
Map<String, Integer> map2 = new LinkedHashMap<>();
map2.put("one", 1);
map2.put("two", 2);

// TreeMap(按鍵排序)
Map<String, Integer> map3 = new TreeMap<>();
map3.put("z", 26);
map3.put("a", 1);

?? 特點(diǎn):

  • 可變(Mutable):支持增刪改查;
  • 最基礎(chǔ)、最靈活,適用于絕大多數(shù)需要修改的場(chǎng)景;
  • 沒有語法糖,需要手動(dòng) put。

? 二、創(chuàng)建不可變 Map(Immutable Map)(創(chuàng)建后不能修改)

指的是創(chuàng)建后 不能增刪改,適合配置、常量、映射關(guān)系固定等場(chǎng)景。

1.Java 9+ 推薦:使用Map.of()和Map.ofEntries()(簡潔、不可變)

? Java 9 引入,Java 17 完全支持!

(1)Map.of(K k1, V v1, K k2, V v2, ...)——適合少量鍵值對(duì)(最多10組)

// Java 9+ 提供的不可變 Map,最多支持 10 組鍵值對(duì)
Map<String, Integer> immutableMap1 = Map.of(
    "apple", 1,
    "banana", 2,
    "cherry", 3
);

// 以下會(huì)編譯報(bào)錯(cuò):Map.of() 最多允許 10 個(gè)鍵值對(duì)
// Map<String, Integer> map = Map.of("a",1,"b",2,... up to 10);

?? 限制:

  • 鍵值對(duì)數(shù)量 不能超過 10 組;
  • 鍵和值都不可為 null(會(huì)拋 NullPointerException);
  • 創(chuàng)建后 完全不可變(不能 put、remove、clear 等)。

(2)Map.ofEntries(Map.Entry<?, ?>...)或使用Map.entry(k, v)構(gòu)造更多鍵值對(duì)

當(dāng)你想創(chuàng)建 超過 10 組鍵值對(duì),或者更靈活地構(gòu)造 Entry 時(shí),可以用:

import java.util.Map;

Map<String, Integer> immutableMap2 = Map.ofEntries(
    Map.entry("apple", 1),
    Map.entry("banana", 2),
    Map.entry("cherry", 3),
    Map.entry("date", 4),
    // 可以繼續(xù)添加,沒有 10 個(gè)的限制
    Map.entry("elderberry", 5)
    // ...理論上可以很多,但建議適度
);

?? 特點(diǎn):

  • 鍵值對(duì)數(shù)量 無硬性限制(但別太夸張);
  • 同樣 不可變(immutable),創(chuàng)建后不能修改;
  • 鍵和值 不允許為 null(會(huì)拋異常);
  • 更靈活,適合較復(fù)雜的初始化。

2.使用Collections.unmodifiableMap()包裝一個(gè)普通 Map(手動(dòng)構(gòu)造后再設(shè)為不可變)

適用于:你先創(chuàng)建一個(gè)普通的 HashMap,然后希望包裝成 不可修改的視圖。

Map<String, Integer> mutableMap = new HashMap<>();
mutableMap.put("apple", 1);
mutableMap.put("banana", 2);

// 包裝為不可修改的 Map(視圖)
Map<String, Integer> unmodifiableMap = Collections.unmodifiableMap(mutableMap);

// 以下操作會(huì)拋 UnsupportedOperationException:
// unmodifiableMap.put("cherry", 3);

?? 特點(diǎn):

  • 原始 mutableMap仍然可變(如果你保留了它的引用);
  • unmodifiableMap是一個(gè) 只讀視圖,任何修改操作都會(huì)拋異常;
  • 適用于“構(gòu)造后轉(zhuǎn)不可變”的場(chǎng)景。

? 三、其他創(chuàng)建 Map 的方式(Java 17 也支持)

1.雙括號(hào)初始化(Double Brace Initialization)——不推薦 ??

這是一種利用匿名內(nèi)部類的寫法,可以快速初始化 Map,但:

  • 不推薦使用!
  • 會(huì)導(dǎo)致內(nèi)存泄漏(內(nèi)部類持有外部類引用);
  • 代碼可讀性差;
  • 性能與設(shè)計(jì)上均有問題;
// 不推薦?。。H作了解
Map<String, Integer> map = new HashMap<>() {{
    put("apple", 1);
    put("banana", 2);
}};

? Java 社區(qū)普遍不推薦此寫法,尤其在正式項(xiàng)目中。

2.使用 Stream + Collectors.toMap()(適合動(dòng)態(tài)構(gòu)建、轉(zhuǎn)換等場(chǎng)景)

適用于:你有一組數(shù)據(jù),想通過 流(Stream)處理后收集為 Map。

import java.util.*;
import java.util.stream.*;

List<String> fruits = Arrays.asList("apple", "banana", "cherry");

// 比如:將 List 轉(zhuǎn)為 Map<元素, 長度>
Map<String, Integer> map = fruits.stream()
        .collect(Collectors.toMap(
            fruit -> fruit,             // Key: 水果名稱
            fruit -> fruit.length()     // Value: 名稱長度
        ));

// 結(jié)果如:{"apple"=5, "banana"=6, "cherry"=6}

?? 特點(diǎn):

  • 非常靈活,適合 動(dòng)態(tài)構(gòu)建 Map
  • 你可以控制 key / value 的生成邏輯;
  • 如果 key 重復(fù),需處理沖突(或使用 Collectors.toMap(key, value, (v1,v2)->v1)合并函數(shù));
  • 返回的是 可變 Map(通常是 HashMap)

? 四、總結(jié):Java 17 創(chuàng)建 Map 的常見方式(表格概覽)

方式

可變性

是否支持 Null

鍵值對(duì)數(shù)量限制

適用場(chǎng)景

Java 版本

new HashMap<>()
new LinkedHashMap<>()
new TreeMap<>()

? 可變

? 支持 null

無限制

通用可變 Map,最常用

所有版本

Map.of(k1,v1, ...)

? 不可變

? 不支持 null

最多 10 組

少量固定鍵值對(duì),常量初始化

Java 9+

Map.ofEntries(Map.entry(k,v)...)

? 不可變

? 不支持 null

無嚴(yán)格限制

較多鍵值對(duì)、靈活初始化

Java 9+

Collections.unmodifiableMap(map)

? 不可變(視圖)

? 取決于原 Map

無限制

將已有 Map 轉(zhuǎn)為不可變視圖

所有版本

Stream + Collectors.toMap()

? 可變(通常是 HashMap)

? 取決于邏輯

無限制

動(dòng)態(tài)構(gòu)建、轉(zhuǎn)換數(shù)據(jù)為 Map

所有版本

雙括號(hào)初始化 {{ put(...) }}

? 可變

? 支持 null

無限制

快速測(cè)試,不推薦生產(chǎn)使用

所有版本(但不推薦)

? 推薦實(shí)踐(Java 17)

場(chǎng)景

推薦方式

需要可變 Map,后續(xù)增刪改查

Map<String, Integer> map = new HashMap<>();

少量固定鍵值對(duì)(<=10),不可變(常量)

Map.of("k1", v1, "k2", v2)

多個(gè)鍵值對(duì)(>10)、不可變

Map.ofEntries(Map.entry(k1,v1), Map.entry(k2,v2), ...)

動(dòng)態(tài)構(gòu)建 Map(如從 List 轉(zhuǎn) Map)

list.stream().collect(Collectors.toMap(...))

將現(xiàn)有 Map 設(shè)為不可變

Collections.unmodifiableMap(map)

不推薦

雙括號(hào)初始化 {{ put(...) }}

? 示例:Java 17 創(chuàng)建 Map 的推薦寫法

1. 可變 Map(最常用):

Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);

2. 不可變 Map(少量):

Map<String, Integer> immutableMap = Map.of("a", 1, "b", 2);

3. 不可變 Map(較多鍵值對(duì)):

Map<String, Integer> immutableMap = Map.ofEntries(
    Map.entry("a", 1),
    Map.entry("b", 2),
    Map.entry("c", 3)
);

4. 動(dòng)態(tài)構(gòu)建(比如從對(duì)象列表生成):

List<String> names = List.of("Alice", "Bob", "Charlie");
Map<String, Integer> nameLengths = names.stream()
    .collect(Collectors.toMap(name -> name, String::length));

? 總結(jié)回答(一句話)

在 Java 17 中,創(chuàng)建 Map 的方式有很多種,常見的包括:使用 new HashMap<>()(可變,最常用)、Map.of()和 Map.ofEntries()(Java 9+,不可變,簡潔)、Collections.unmodifiableMap()(包裝為不可變視圖)、以及 Stream + Collectors.toMap()(動(dòng)態(tài)構(gòu)建)。你可以根據(jù)是否需要可變性、是否要不可變、鍵值對(duì)數(shù)量、代碼風(fēng)格等選擇最合適的方式。

到此這篇關(guān)于java17創(chuàng)建map的方式有幾種的文章就介紹到這了,更多相關(guān)java17創(chuàng)建map內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot如何基于JWT實(shí)現(xiàn)單點(diǎn)登錄詳解

    spring boot如何基于JWT實(shí)現(xiàn)單點(diǎn)登錄詳解

    這篇文章主要介紹了spring boot如何基于JWT實(shí)現(xiàn)單點(diǎn)登錄詳解,用戶只需登錄一次就能夠在這兩個(gè)系統(tǒng)中進(jìn)行操作。很明顯這就是單點(diǎn)登錄(Single Sign-On)達(dá)到的效果,需要的朋友可以參考下
    2019-06-06
  • java集合類ArrayList和Vector的區(qū)別面試精講

    java集合類ArrayList和Vector的區(qū)別面試精講

    這篇文章主要為大家介紹了java集合類ArrayList和Vector的區(qū)別面試全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Java Elastic Job動(dòng)態(tài)添加任務(wù)實(shí)現(xiàn)過程解析

    Java Elastic Job動(dòng)態(tài)添加任務(wù)實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Java Elastic Job動(dòng)態(tài)添加任務(wù)實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 基于Springboot疫苗接種行程管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    基于Springboot疫苗接種行程管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    本文主要介紹了基于Springboot實(shí)現(xiàn)的疫苗接種行程管理系統(tǒng)的示例代碼,系統(tǒng)主要實(shí)現(xiàn)個(gè)人疫苗接種管理、行程管理、病史管理、風(fēng)險(xiǎn)地區(qū)管理、核酸檢測(cè)報(bào)告結(jié)果上報(bào)、疫情新聞管理等功能,需要的可以參考一下
    2022-03-03
  • JAVA hashCode使用方法詳解

    JAVA hashCode使用方法詳解

    本文詳細(xì)解釋了JAVA hashCode的使用方法,提供了測(cè)試hashCode和equals方法的使用實(shí)例
    2013-11-11
  • java生成餅圖svg及JFreeChart生成svg圖表

    java生成餅圖svg及JFreeChart生成svg圖表

    java生成餅圖svg,代碼實(shí)現(xiàn)感覺有點(diǎn)復(fù)雜,個(gè)人認(rèn)為不如用JFreeChart,這篇文章主要介紹java生成餅圖svg及JFreeChart生成svg圖表,有需要的小伙伴可以參考下
    2015-08-08
  • Spring?Boot?集成Elasticsearch模塊實(shí)現(xiàn)簡單查詢功能

    Spring?Boot?集成Elasticsearch模塊實(shí)現(xiàn)簡單查詢功能

    本文講解了Spring?Boot集成Elasticsearch采用的是ES模板的方式實(shí)現(xiàn)基礎(chǔ)查詢,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-06-06
  • Spring ApplicationListener的使用詳解

    Spring ApplicationListener的使用詳解

    這篇文章主要介紹了Spring ApplicationListener的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • SpringBoot使用ShardingSphere-Proxy的實(shí)現(xiàn)示例

    SpringBoot使用ShardingSphere-Proxy的實(shí)現(xiàn)示例

    ShardingSphere-Proxy是一個(gè)獨(dú)立的數(shù)據(jù)庫代理層,可以與SpringBoot集成,本文介紹了SpringBoot使用ShardingSphere-Proxy的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • Spring中任務(wù)調(diào)度之解讀@Scheduled和@Schedules注解的使用

    Spring中任務(wù)調(diào)度之解讀@Scheduled和@Schedules注解的使用

    這篇文章主要介紹了Spring中任務(wù)調(diào)度之解讀@Scheduled和@Schedules注解的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評(píng)論

吴川市| 临泽县| 乌拉特中旗| 陇南市| 咸宁市| 西宁市| 东乡族自治县| 武强县| 繁峙县| 拉孜县| 麻城市| 安仁县| 依兰县| 石渠县| 安陆市| 沧州市| 安顺市| 金坛市| 油尖旺区| 乐业县| 临城县| 化隆| 瓮安县| 馆陶县| 治县。| 荆州市| 广昌县| 和平县| 汉沽区| 石城县| 景德镇市| 江都市| 正定县| 中牟县| 金湖县| 宁城县| 景洪市| 长丰县| 禄丰县| 双辽市| 平邑县|