初学java,有一天碰到这么个问题,用一段很短的代码复现一下:
public class HelloWorld {
public static void main(String[] args){
Map<Set<String>,Set<String>> map = new HashMap<>();
Set<String> a= new HashSet<>();
a.add("1");
Set<String> b= new HashSet<>();
b.add("2");
map.put(a,b);
a.add("2");
b.add("3");
System.out.println(map);
}
}
输出:
{[1, 2]=[2, 3]}
原因即传入的set是引用,并不会像c++新复制一份,即占用新空间,然后传进去。所以后面的修改也会影响map已经插入的元素。不过如果将set换为Integer好像就又没有这种问题了,所以以后往map或者set里面放元素的时候还是临时new一个再放进去比较好。