国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

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

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

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

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

前言

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

在這個快速教程中,我們將看到它們之間的區(qū)別。然后,我們將介紹可以創(chuàng)建不可變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包含其自己的私有數(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中所有條目的副本:

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

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

?
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"));

總結

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品美女高潮无套久久 | 久久久久久久国产毛片 | 日韩视频在线观看 | 97精品国产97久久久久久免费 | 国产高清视频在线观看 | 日韩在线观看中文字幕 | 欧美在线综合 | 日本精品在线观看 | 日韩福利在线 | 国产精品毛片久久久久久久 | 免费一级毛片网站 | 欧美freesex | 精品国产乱码久久久久久牛牛 | 精品久久精品 | 国产精品亚洲视频 | 午夜成人免费电影 | 最新中文字幕 | 亚洲欧美在线播放 | 午夜视频在线免费观看 | 久久久久久久av | 久久久久久久久久久免费视频 | 曰韩在线 | 丝袜美腿一区二区三区 | 国产精品乱码久久 | 国产免费一区二区三区 | 狠狠干夜夜 | 欧美一区二区三区久久久久久桃花 | 国产视频网| 久久这里只有精品免费 | 亚州av在线 | 欧美一区二区三区婷婷月色 | 91视频导航 | 日韩簧片 | 日本免费高清视频 | 亚洲午夜网 | 亚洲综合区| 在线播放中文字幕 | 日本一区二区免费在线播放 | 一区二区三区在线播放 | 欧美在线观看免费观看视频 | 精品久久久久久久久久久 |