保护Map的内容免受修改

Gar*_*ici 2 java list map

我有一个Map类型的变量

Map<AiTile, List<AiTile>> result = new HashMap<AiTile, List<AiTile>>();
Run Code Online (Sandbox Code Playgroud)

例如; 我在地图内部推了几个AiTile-List然后用方法'clear'擦除List的内容.当我删除列表的内容时,我想保护地图的内容,我该怎么办?

Jay*_*kov 5

Map.put(key, value)添加对列表的引用,而不是实际的列表内容.如果我理解正确,您希望在地图中保留旧的列表值并删除原始列表的内容.

您可能希望将原始列表的副本添加到地图中,而不是引用.例如:

map.put(key, new ArrayList<AiTile>(originalList));
Run Code Online (Sandbox Code Playgroud)

UPDATE

如果您想将关键值对添加到地图中,只有它们尚未存在并更新地图中已有的列表,请使用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);
}
Run Code Online (Sandbox Code Playgroud)

NOTE:根据定义,Lists可以包含重复项.如果要合并两个列表之间的所有项目以使它们不包含重复项,您可能需要查看Sets.

>> java doc是你最好的朋友