欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

不可修改與不可變

Unmodifiable Map其實是一個可以修改的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ù),是不允許對其進行修改。因此,一旦創(chuàng)建了不可變Map的實例,數(shù)據(jù)就不會以任何方式改變。

Guava不變Map

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

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

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

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)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • java后臺如何利用Pattern提取所需字符詳解

    java后臺如何利用Pattern提取所需字符詳解

    這篇文章主要給大家介紹了關(guān)于java后臺如何利用Pattern提取所需字符的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • Spring Boot 整合 Druid過程解析

    Spring Boot 整合 Druid過程解析

    這篇文章主要介紹了Spring Boot 整合 Druid過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • java簡單操作word實例

    java簡單操作word實例

    這篇文章主要為大家詳細介紹了java簡單操作word實例,感興趣的朋友可以參考一下
    2016-03-03
  • java算法Leecode刷題統(tǒng)計有序矩陣中的負數(shù)

    java算法Leecode刷題統(tǒng)計有序矩陣中的負數(shù)

    這篇文章主要為大家介紹了java算法Leecode刷題統(tǒng)計有序矩陣中的負數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 舉例說明JAVA調(diào)用第三方接口的GET/POST/PUT請求方式

    舉例說明JAVA調(diào)用第三方接口的GET/POST/PUT請求方式

    在日常工作和學習中,有很多地方都需要發(fā)送請求,這篇文章主要給大家介紹了關(guān)于JAVA調(diào)用第三方接口的GET/POST/PUT請求方式的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • java實現(xiàn)簡單的拼圖游戲

    java實現(xiàn)簡單的拼圖游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單的拼圖游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • JAVA?String類中的一些常用方法示例詳解

    JAVA?String類中的一些常用方法示例詳解

    在我們的工作中,常常要對一個字符串進行一些操作,這里提供一些常用的方法,常常需要這些方法進行組合處理字符串,這篇文章主要給大家介紹了關(guān)于JAVA?String類中的一些常用方法,需要的朋友可以參考下
    2023-10-10
  • maven打包zip包含bin下啟動腳本的完整代碼

    maven打包zip包含bin下啟動腳本的完整代碼

    這篇文章主要介紹了maven打包zip包含bin下啟動腳本,本文給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • Springboot常用方法參數(shù)注解示例詳解

    Springboot常用方法參數(shù)注解示例詳解

    這篇文章主要介紹了Springboot常用方法參數(shù)注解及示例,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Java基礎(chǔ)知識之StringReader流的使用

    Java基礎(chǔ)知識之StringReader流的使用

    這篇文章主要介紹了Java基礎(chǔ)知識之StringReader流的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論