我可以通过Keyset修改Map

时间:2011-04-25 17:28:05

标签: java collections

我正在尝试将过滤器应用于地图。目的是仅保留作为集合一部分的那些键。以下实现确实提供了所需的结果,但我想知道这是否正确?

private void filterProperties(Map<String, Serializable> properties, Set<String> filterSet) {
    Set<String> keys = properties.keySet();
    keys.retainAll(filterSet);
}

3 个答案:

答案 0 :(得分:5)

是!

  

该集由地图支持,因此对地图的更改会反映在集合中,反之亦然

(见:http://download.oracle.com/javase/1.4.2/docs/api/java/util/Map.html#keySet%28%29

答案 1 :(得分:2)

Itay's answer是正确的,但是您应确保properties未被其他线程修改,或者本身是一个线程安全的Map实现。

如果Map不是线程安全的(例如HashMap)并且被其他线程修改,则可能会ConcurrentModificationException

答案 2 :(得分:0)

你的代码看起来不错。您可以将一行写为properties.keySet().retainAll(filterSet);

我看到的一个问题是地图可能无法修改。如果这是一种可能性,那么可能会使用原始条目集构建一个新地图,然后过滤并返回它将是一个更好的选择。