我的函数返回HashMap成员的键集。
来自the JavaDoc:
集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。
我想避免这种行为。
我想返回一个不可修改的集合,也许是该集合的副本。
我不希望对集合或地图的更改相互反映。
有没有最佳做法来处理这种情况?
答案 0 :(得分:1)
就个人而言,我会选择Google的Guava - 特别是对于我想要返回一个不可修改的集合,也许是该集合的副本。 - 如果地图增长,ImmutableSet
赢了“表现出增长:
ImmutableSet.copyOf(map.keySet());
或者如果您想使用标准Java API - 请注意,生成的Set
会随着Map
的增长而增长:
Collections.unmodifiableSet(map.keySet());
根据您的要求,使用上述任何一种都被视为良好做法。
答案 1 :(得分:1)
标准方法是返回副本,通常使用copy constructor:
以下是您可以使用的实用方法:
public static <K, V> Set<Map.Entry<K, V>> copyKeys(Map<K, V> map) {
return new HashSet<Map.Entry<K, V>>(map.keySet());
}
答案 2 :(得分:1)
您可以使用专为此设计的标准Collections.unmodifiableSet
。尝试修改包装的Set将最终出现在UnsupportedOperationException