初學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一個再放進去比較好。