ArrayList 的深複製與淺複製

2021-05-22 09:25:42 字數 1160 閱讀 7340

arraylist是我在c#裡用得最多的乙個資料結構。其使用簡單,並且功能強大。arraylist 的容量是根據需要自動擴充套件的,能動態建立各種資料格式的鍊錶,以及對鍊錶裡面的元素進行新增、刪除等操作。arraylist的使用方法都比較簡單,容易搞錯的就是arraylist的複製問題。

複製 arraylist 的時候,使用 arraylist.clone() 方法複製出來的新 arraylist 之中元素的值會隨著源 arraylist 中元素的值發生變化而一起改變。

msdn的說法是:集合的淺表副本僅複製集合的元素(不論它們是引用型別還是值型別),但不複製引用所引用的物件。新集合中的引用與原始集合中的引用指向相同的物件。與之相對,集合的深層副本將複製這些元素以及由它們直接或間接引用的所有內容。

arraylist.clone() 返回值是 arraylist 的淺表副本。

網上大多數的說法是,新建乙個arraylist例項,逐條複製 property,使用 for 實現:

for (int i = 0; i < srcarraylist.count; i++)

第二種方法是,我們知道,對於自定義的類,一般通過繼承 icloneable介面,重寫 clone() 方法來自己實現深拷貝。

因此如果類有繼承 icloneable 介面,也可以這麼寫:

for(

inti =0

; i 

<

srcarraylist.count; i++)

還有一種是通過另外讓類實現 iserializable 介面,通過序列化反序列化的方法實現:

memorystream ms =

newmemorystream();

binaryformatter bf 

=new

binaryformatter();

bf.serialize(ms,srcarraylist); 

// list1中元素的類要實現iserializable介面

ms.seek(

0, seekorigin.begin);

dstarraylist

=(arraylist)bf.deserialize(ms);

ms.close;

參考:http://www.cnblogs.com/dz2345/archive/2008/02/08/1066085.html

Python深複製淺複製or深拷貝淺拷貝

簡單點說 1.copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。2.copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy a 1,2,3,4,a b c b a c copy.copy a d copy.deepcopy a 很...

js的淺拷貝,深複製

淺拷貝,拷貝的是乙個陣列 var arr one two three var arrto arr arrto 1 test document.writeln 陣列的原始值 arr export 陣列的原始值 one,test,three document.writeln 陣列的新值 arrto ex...

轉 Python深複製淺複製or深拷貝淺拷貝

copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy a 1,2,3,4,a b c b a c copy.copy a d copy.deepcopy a 很容易理解 a是乙個...