Map类对象的keySet()返回是一个Set对象引用,而不是一份拷贝,如果对返回值进行操作,会影响Map对象,这个坑容易被忽略。
Map<Object, Object> map = HashMap<Object, Object>();
map.put("1","aaa");
map.put("2","bbb");
map.put("3","ccc");
Set<Object> set = map.keySet();
set.remove("1");
map.get("1") //返回null
所以,如果要得到一个独立的键集合的话,使用new HashSet<>(map.keySet())
深拷贝即可。
以此类推,其他JDK里面的集合类也会存在类似的机制,以后使用的时候要多加小心!
网友评论