Map类的KeySet返回值只是一个引用

Map类对象的keySet()返回是一个Set对象引用,而不是一份拷贝,如果对返回值进行操作,会影响Map对象,这个坑容易被忽略。

Map map = HashMap();
map.put("1","aaa");
map.put("2","bbb");
map.put("3","ccc");
Set set = map.keySet();
set.remove("1");
map.get("1") //返回null
 
 

所以,如果要得到一个独立的键集合的话,使用new HashSet<>(map.keySet())深拷贝即可。
以此类推,其他JDK里面的集合类也会存在类似的机制,以后使用的时候要多加小心!

你可能感兴趣的:(Map类的KeySet返回值只是一个引用)