日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java禁止修改map_Java中实现不可变Map

發(fā)布時間:2024/7/19 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java禁止修改map_Java中实现不可变Map 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

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

不可修改與不可變

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

Map mutableMap = new HashMap<>();

mutableMap.put("USA", "North America");

Map 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 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 immutableMap = ImmutableMap.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 immutableMap

= ImmutableMap.of("USA", "North America", "Costa Rica", "North America");

assertTrue(immutableMap.containsKey("USA"));

assertTrue(immutableMap.containsKey("Costa Rica"));

總結

以上是生活随笔為你收集整理的java禁止修改map_Java中实现不可变Map的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。