[英]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.