我的函數返回HashMap成員的鍵集。最佳做法:如何從java中的方法返回地圖的keyset
該組由映射支持,所以對映射的改變被反映在該組,並且反之亦然。
我想避免這種行爲。
我想返回一個不可修改的集合,也許是集合的一個副本。
我不希望更改設置或地圖以反映在另一個。
有沒有處理這種情況的最佳實踐?
我的函數返回HashMap成員的鍵集。最佳做法:如何從java中的方法返回地圖的keyset
該組由映射支持,所以對映射的改變被反映在該組,並且反之亦然。
我想避免這種行爲。
我想返回一個不可修改的集合,也許是集合的一個副本。
我不希望更改設置或地圖以反映在另一個。
有沒有處理這種情況的最佳實踐?
就我個人而言,我會使用谷歌的番石榴 - 尤其是我想返回一個不可修改的集合,也許是該集合的一個副本。 - 如果地圖上的增長,ImmutableSet
將不會出現增長:
ImmutableSet.copyOf(map.keySet());
或者,如果你想使用標準的Java API - 請注意,導致Set
將隨着你的成長Map
:
Collections.unmodifiableSet(map.keySet());
考慮到您的要求,使用上述任何一種都被認爲是良好的做法。
的標準方法是返回一個副本,通常使用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());
}
您可以使用標準Collections.unmodifiableSet
這正是專爲。嘗試修改包裝的Set將最終在UnsupportedOperationException
您是否擔心突變集合的結構,突變集合中的項目的屬性或兩者?如果你只是擔心第一件事,那就創建一個新的Set:'Set freshSet = new HashSet (map.keySet());'' –
jahroy