java 複製Map物件(深拷貝與淺拷貝)

2021-09-25 04:53:15 字數 868 閱讀 4170

淺拷貝:只複製物件的引用,兩個引用仍然指向同乙個物件,在記憶體中占用同一塊記憶體;

被複製物件的所有變數都含有與原來的物件相同的值,而所有的對其他物件的引用仍然指向原來的物件;

換言之,淺複製僅僅複製所考慮的物件,而不複製它所引用的物件。

深拷貝:被複製物件的所有變數都含有與原來的物件相同的值,除去那些引用其他物件的變數;

那些引用其他物件的變數將指向被複製過的新物件,而不再是原有的那些被引用的物件;

換言之,深複製把要複製的物件所引用的物件都複製了一遍。

使用map物件只能實現淺拷貝

public

static

void

main(string args)

//實現淺拷貝方式二:使用map.putall()

parammap2.putall(parammap);

parammap.remove("name");

system.out.println(parammap2);

//{}

}

使用hashmap物件可是實現深拷貝

public

static

void

main(string args)

}

實現淺拷貝的方式有兩種:=和map.putall();

實現深拷貝:hashmap.putall()。

大多數情況下,我們需要實現的是深拷貝而不是淺拷貝;

使用map呼叫putall()方法,並不是真正意義上的拷貝,map物件b只是對map物件a進行了引用,當map物件a中的內容發生變化時,map物件b也會發生變化;

使用hashmap呼叫putall()方法才是真正意義上的拷貝。

Map物件的淺拷貝與深拷貝

問題 map拷貝時發現資料會變化。先看例子 public class copymap 上面程式的期望輸出值是,mapfrist的值均為1,但是實際上輸出結果為 這裡是因為map發生了淺拷貝,mapfirst只是複製了map的引用,和map仍使用同乙個記憶體區域,所以,在修改map的時候,mapfir...

複製物件 和 淺拷貝,深拷貝

複製物件顧名思義,複製乙個物件作為副本,它會開闢一塊新的記憶體 堆記憶體 來儲存副本物件,就像複製檔案一樣.既源物件和副本物件是兩塊不同的記憶體區域.物件具備複製功能,必須實現 協議協議 常用的可複製物件有,nsnumber,nsstring,nsarray,nsdictionary,nsmutab...

JS物件複製 深拷貝 淺拷貝

在本文中,我們將從淺拷貝 shallow copy 和深拷貝 deep copy 兩個方面,介紹多種 js 中複製物件的方法。var foo console.log foo.a abc var bar foo console.log bar.a abc foo.a yo foo console.lo...