[英]Guava copyOf nested collections
假設我有以下Map定義:
Map<String, List<Set<Integer>>> map = Maps.newHashMap();
map.put("a", Arrays.asList(Sets.newHashSet(1, 2, 3), Sets.newHashSet(4, 5)));
我創建地圖的不變副本,如下所示:
ImmutableMap<String, List<Set<Integer>>> immutableMap = ImmutableMap.copyOf(map);
如果我調用immutableMap.get("a").add(Sets.newHashSet(4));
我收到一個錯誤,指示嵌套列表在復制的集合中也是不可變的。 但是,如果調用了immutableMap.get("a").get(1).add(6);
可以執行,如果我打印輸出結果,我將得到:
{a=[[1, 2, 3], [4, 5, 6]]}
這是否意味着copyOf
僅使嵌套的不可變集合copyOf
?
不,這是因為Arrays#asList(Object...)
返回一個固定大小的List
,即。 無法從中添加或刪除元素。
ImmutableMap#copyOf(..)
javadoc狀態
返回一個不變的地圖,其中包含與地圖相同的條目。
因此,鍵為"a"
的條目的值是Arrays#asList(Object...)
返回的List
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.