麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

Java中如何實現不可變Map詳解

2024-07-14 08:43:07
字體:
來源:轉載
供稿:網友

前言

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

在這個快速教程中,我們將看到它們之間的區別。然后,我們將介紹可以創建不可變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包含其自己的私有數據,是不允許對其進行修改。因此,一旦創建了不可變Map的實例,數據就不會以任何方式改變。

Guava不變Map

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

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

我們現在將討論創建ImmutableMap實例的各種方法  。

1. 使用copyOf()方法:

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

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

它不能直接修改,但是可以改變其內部可變的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()  方法創建原始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()  方法創建一個不可變的Map,其中包含動態提供的一組條目。它最多支持五個鍵/值對:

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美一区黄色 | 欧美特黄一级高清免费的香蕉 | 欧美综合在线观看 | 毛片视频免费观看 | 成年人高清视频在线观看 | 久久精品com | 国产免费小视频在线观看 | 欧美一级α | 国产亚洲精品久久午夜玫瑰园 | 精品在线观看一区二区三区 | 成人午夜精品久久久久久久蜜臀 | 成人精品aaaa网站 | 免费观看一级 | 亚洲乱妇19p | 色屁屁xxxxⅹ在线视频 | 亚洲福利视 | 日本搞逼视频 | 涩涩激情网 | 成年人国产视频 | 99视频有精品 | 妇女毛片 | 高颜值美女啪啪 | 一级全毛片 | 免费毛片播放 | 在线1区 | 九色一区二区 | 亚洲人成网站在e线播放 | 中文字幕在线视频日本 | 中国美女一级黄色片 | 久久99国产精品久久99果冻传媒 | 久久精品伊人网 | 久草在线新视觉 | 91在线精品亚洲一区二区 | 国产精品视频一区二区三区四 | 日本aaaa片毛片免费观看视频 | 黄色免费入口 | 久久久久久久一区二区 | 精品亚洲午夜久久久久91 | 国产亚洲精品一区二区三区 | 欧美十区 | 91看片在线观看视频 |