一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java中如何實現不可變Map詳解

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

2021-06-20 15:02jdon Java教程

這篇文章主要給大家介紹了關于Java中如何實現不可變Map的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作工具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

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

在這個快速教程中,我們將看到它們之間的區別。然后,我們將介紹可以創建不可變map的各種方法。

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

不可修改與不可變

unmodifiable map其實是一個可以修改的map的包裝器,不允許直接修改它。

?
1
2
3
4
5
6
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中:

?
1
2
3
4
5
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中所有條目的副本:

?
1
2
immutablemap<string, string> immutablemap = immutablemap.copyof(mutablemap);
asserttrue(immutablemap.containskey("usa"));

它不能直接修改,但是可以改變其內部可變的map:

?
1
2
3
4
5
6
7
8
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中不存在的其他條目:

?
1
2
3
4
5
6
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,其中包含動態提供的一組條目。它最多支持五個鍵/值對:

?
1
2
3
4
immutablemap<string, string> immutablemap
 = immutablemap.of("usa", "north america", "costa rica", "north america");
asserttrue(immutablemap.containskey("usa"));
asserttrue(immutablemap.containskey("costa rica"));

總結

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

原文鏈接:https://www.jdon.com/50941

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲国产精品综合一区在线 | 99在线视频精品 | 18日本xxxxxxⅹxx96 | 996免费视频国产在线播放 | 夫妇野外交换激情 | 好大好深好涨好烫还要 | 国产精品66福利在线观看 | 欧美人禽杂交狂配无删完整 | 操老逼 | 亚洲国产精品综合久久网络 | 欧美人伦禁忌.5 | 亚洲天堂精品视频 | 青草草视频在线观看 | 青青草在线播放 | 91免费破解版| 欧美日韩综合网在线观看 | 国产亚洲精品综合在线网址 | 香蕉eeww99国产精选播放 | 色中文网| 亚洲无限观看 | 亚久久伊人精品青青草原2020 | 女人特黄大aaaaaa大片 | 精品欧美小视频在线观看 | china国产bbw | 精品国产精品国产偷麻豆 | 白丝憋尿 | 国产精品视频2020 | 国产成年人网站 | 国产成人精品免费视频软件 | 91久久国产露脸精品 | 国产成年人在线观看 | 久久天天综合 | 亚洲成年网站在线观看 | 村妇超级乱淫伦小说全集 | 日韩亚洲欧美一区二区三区 | 久久99精国产一区二区三区四区 | 国色天香 社区视频 | 日韩欧美亚洲一区精选 | 日本中文字幕永久在线 | 四虎地址8848aa4hc44四虎 四虎成人永久地址 | 四虎影视网址 |