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

Java中如何實(shí)現(xiàn)不可變Map詳解

 更新時間:2018年12月09日 11:52:33   作者:banq  
這篇文章主要給大家介紹了關(guān)于Java中如何實(shí)現(xiàn)不可變Map的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作工具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

有時最好不允許修改  java.util.Map, 例如跨線程共享只讀數(shù)據(jù)。為此,我們可以使用Unmodifiable Map或Immutable Map。

在這個快速教程中,我們將看到它們之間的區(qū)別。然后,我們將介紹可以創(chuàng)建不可變Map的各種方法。

下面話不多說了,來一起看看詳細(xì)的介紹吧

不可修改與不可變

Unmodifiable Map其實(shí)是一個可以修改的map的包裝器,不允許直接修改它。

Map<String, String> mutableMap = new HashMap<>();
mutableMap.put("USA", "North America");

Map<String, String> unmodifiableMap = Collections.unmodifiableMap(mutableMap);
assertThrows(UnsupportedOperationException.class,
 () -> unmodifiableMap.put("Canada", "North America"));

但是包裝器里面底層的可變Map仍然可以改變,修改也反映在不可修改的Map中:

mutableMap.remove("USA");
assertFalse(unmodifiableMap.containsKey("USA"));
  
mutableMap.put("Mexico", "North America");
assertTrue(unmodifiableMap.containsKey("Mexico"));

另一方面,不可變Map包含其自己的私有數(shù)據(jù),是不允許對其進(jìn)行修改。因此,一旦創(chuàng)建了不可變Map的實(shí)例,數(shù)據(jù)就不會以任何方式改變。

Guava不變Map

Guava提供了每個java.util的不可變版本。使用  ImmutableMap 映射 。每當(dāng)我們嘗試修改它時,它都會拋出  UnsupportedOperationException。

由于它包含自己的私有數(shù)據(jù),因此在更改原始地圖時,此數(shù)據(jù)不會更改。

我們現(xiàn)在將討論創(chuàng)建ImmutableMap實(shí)例的各種方法  。

1. 使用copyOf()方法:

首先,讓我們使用ImmutableMap.copyOf()  方法,該方法返回原始Map中所有條目的副本:

ImmutableMap<String, String> immutableMap = ImmutableMap.copyOf(mutableMap);
assertTrue(immutableMap.containsKey("USA"));

它不能直接修改,但是可以改變其內(nèi)部可變的Map:

assertThrows(UnsupportedOperationException.class,
 () -> immutableMap.put("Canada", "North America"));
  
mutableMap.remove("USA");
assertTrue(immutableMap.containsKey("USA"));
  
mutableMap.put("Mexico", "North America");
assertFalse(immutableMap.containsKey("Mexico"));

2.使用builder()方法

我們還可以使用  ImmutableMap.builder()  方法創(chuàng)建原始Map中所有條目的副本。

此外,我們可以使用此方法添加原始Map中不存在的其他條目:

ImmutableMap<String, String> immutableMap = ImmutableMap.<String, String>builder()
 .putAll(mutableMap)
 .put("Costa Rica", "North America")
 .build();
assertTrue(immutableMap.containsKey("USA"));
assertTrue(immutableMap.containsKey("Costa Rica"));

3. 使用of()

最后,我們可以使用ImmutableMap.of()  方法創(chuàng)建一個不可變的Map,其中包含動態(tài)提供的一組條目。它最多支持五個鍵/值對:

ImmutableMap<String, String> immutableMap
 = ImmutableMap.of("USA", "North America", "Costa Rica", "North America");
assertTrue(immutableMap.containsKey("USA"));
assertTrue(immutableMap.containsKey("Costa Rica"));

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • java數(shù)據(jù)類型轉(zhuǎn)換陷阱包括列表陷阱

    java數(shù)據(jù)類型轉(zhuǎn)換陷阱包括列表陷阱

    這篇文章主要介紹了java數(shù)據(jù)類型轉(zhuǎn)換的一些陷阱,包括基本數(shù)據(jù)類型轉(zhuǎn)換列表陷阱,基本上這一篇就把常見的問題就給大家分享一下
    2020-10-10
  • Apache?Commons?BeanUtils:?JavaBean操作方法

    Apache?Commons?BeanUtils:?JavaBean操作方法

    這篇文章主要介紹了Apache?Commons?BeanUtils:?JavaBean操作的藝術(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • java格式化數(shù)值成貨幣格式示例

    java格式化數(shù)值成貨幣格式示例

    這篇文章主要介紹了java格式化數(shù)值成貨幣格式示例,格式化一個數(shù)值,比如123456789.123,希望顯示成"$123,456,789.123",需要的朋友可以參考下
    2014-04-04
  • 使用spring通過aop獲取方法參數(shù)和參數(shù)值

    使用spring通過aop獲取方法參數(shù)和參數(shù)值

    這篇文章主要介紹了使用spring通過aop獲取方法參數(shù)和參數(shù)值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringCloud之熔斷器Hystrix的實(shí)現(xiàn)

    SpringCloud之熔斷器Hystrix的實(shí)現(xiàn)

    這篇文章主要介紹了SpringCloud之熔斷器Hystrix的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Java Mybatis批量修改封裝詳解

    Java Mybatis批量修改封裝詳解

    這篇文章主要介紹了Mybatis批量修改封裝的相關(guān)內(nèi)容,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java調(diào)用Oss JDk實(shí)現(xiàn)刪除指定目錄下的所有文件

    Java調(diào)用Oss JDk實(shí)現(xiàn)刪除指定目錄下的所有文件

    這篇文章主要為大家詳細(xì)介紹了Java如何調(diào)用Oss JDk實(shí)現(xiàn)刪除指定目錄下的所有文件功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2025-03-03
  • SpringCloud-feign使用詳解

    SpringCloud-feign使用詳解

    Feign是Spring?Cloud中的輕量級RESTful?HTTP服務(wù)客戶端,它通過定義接口和注解簡化了服務(wù)調(diào)用,Feign支持Ribbon進(jìn)行負(fù)載均衡,并且可以通過OpenFeign與Spring?MVC注解結(jié)合使用,文章詳細(xì)介紹了Feign的使用方法、自定義配置以及與其他組件的集成
    2025-01-01
  • java實(shí)現(xiàn)爬取知乎用戶基本信息

    java實(shí)現(xiàn)爬取知乎用戶基本信息

    這篇文章主要為大家介紹了一個基于JAVA的知乎爬蟲,抓取知乎用戶基本信息,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java使用新浪微博API通過賬號密碼方式登陸微博的實(shí)例

    Java使用新浪微博API通過賬號密碼方式登陸微博的實(shí)例

    這篇文章主要介紹了Java使用新浪微博API通過賬號密碼方式登陸微博的實(shí)例,一般來說第三方App都是采用OAuth授權(quán)認(rèn)證然后跳轉(zhuǎn)之類的方法,而本文所介紹的賬號方式則更具有自由度,需要的朋友可以參考下
    2016-02-02

最新評論

庆安县| 金川县| 全椒县| 朝阳县| 沂南县| 石台县| 西华县| 乐安县| 双鸭山市| 临高县| 徐闻县| 平阴县| 大石桥市| 玉田县| 黑龙江省| 万载县| 万全县| 南木林县| 河北省| 棋牌| 离岛区| 荆州市| 六安市| 澄城县| 福建省| 古蔺县| 明星| 长治县| 米易县| 藁城市| 和平县| 正定县| 蚌埠市| 衡阳市| 广安市| 清原| 南郑县| 西贡区| 新河县| 宁武县| 汾西县|