由于subj行几乎清楚,我想知道如果我在我的覆盖Clone()方法中执行其中任何一个,克隆普通arraylist会有什么不同。
MyArraylist只是普通arraylist的衍生物。
选项1
return new MyArraylist(this);
选项2
MyArraylist temp = new MyArraylist();
temp = (MyArraylist)this.Clone();
return temp;
其中此指的是焦点中需要克隆的Arraylist。 我的arraylist类有一个重载的构造函数
public MyArrayList(MyArrayList oArrayList)
{
lock (oArrayList.SyncRoot)
{
foreach (object oObject in oArrayList)
{
if (oObject is ICloneable)
{
this.Add(((ICloneable)oObject).Clone());
}
else
{
this.Add(oObject);
}
}
}
}
如果我在OPTION 1中使用相对较大的列表,是否会产生性能损失?
希望我很清楚
答案 0 :(得分:0)
在您发布代码之后,我认为您只是将克隆数据列表(选项1)与克隆数组列表进行比较,并将数组列表中的任何可克隆对象相互克隆。
编辑:数组列表只是一个包含引用的对象。因此,新的只是创建一个新的数组列表。所以你有2个数组列表和x个对象。第二个选项将创建一个新的数组列表,并将克隆引用的对象,因此您将需要2个数组列表和2 * x个对象。
这取决于您的要求,如果您需要选项1或选项2.选项1将始终更快,因为它更少工作。