我有一个Map
类型的变量Map<AiTile, List<AiTile>> result = new HashMap<AiTile, List<AiTile>>();
例如;我在地图内部推了几个AiTile-List然后用方法'clear'擦除List的内容。当我删除列表内容时,我想保护地图内容,我该怎么做?
答案 0 :(得分:5)
Map.put(key, value)
添加对列表的引用,而不是实际的列表内容。如果我理解正确,您希望在地图中保留旧的列表值并删除原始列表的内容。
您可能希望将原始列表的副本添加到地图中,而不是引用。 E.g:
map.put(key, new ArrayList<AiTile>(originalList));
如果您想将关键值对添加到地图中,只有它们尚未存在并更新地图中现有的列表,请使用map.contains(key)
和list.addAll(anotherList)
:
// if no key is present
if (!map.containsKey(key)) {
// add key value pair
map.put(key, value);
} else {
// get the current list out of the map
// and merge it with the new one
map.get(key).addAll(value);
}
NOTE:
根据定义,Lists
可以包含重复项。如果要合并两个列表之间的所有项目以使它们不包含重复项,您可能需要查看Sets
。
答案 1 :(得分:1)
我想在删除内容时保护地图内容 列表,我该怎么做
然后,您需要为每个列表的HashMap
添加单独的内容列表:
map.put(key, new ArrayList<AiTile>(list));
如果你需要地图不可修改:
Map<AiTile, List<AiTile>>map = Collections.unmodifiableMap(result);
Collections.unmodifiableMap(map)
:返回指定集合的不可修改视图。此方法允许模块为用户提供对内部集合的"read-only"
访问权限。对返回的集合"read through"
的查询操作到指定的集合,并尝试修改返回的集合,无论是直接还是通过其迭代器,都会产生UnsupportedOperationException
。