我假设它使用数组来实现List。 List.Clear()
如何实施?
它实际上是清理数组还是为这个列表创建一个新数组?
public class List {
private Array _array;
public void Clear1 () {
_array.length = 0;
}
public void Clear2 () {
_array = new Array();
}
}
答案 0 :(得分:15)
像这样(使用.NET Reflector):
public void Clear()
{
if (this._size > 0)
{
Array.Clear(this._items, 0, this._size);
this._size = 0;
}
this._version++;
}
如您所见,它只是清除相同的数组。它可能假定如果您重复使用相同的列表,您可能希望使用大致相同数量的数据重新填充它。如果要释放阵列,则需要创建一个新的List实例。
答案 1 :(得分:13)
MSDN:
Count设置为0,并引用 来自元素的其他对象 收集也已发布。
容量保持不变。重置 列表的容量,调用 TrimExcess方法或设置容量 财产直接。减少 容量重新分配内存和副本 列表中的所有元素。 修剪一个空列表设置 列表的容量为默认值 容量。
此方法是O(n)操作, 其中n是计数。
答案 2 :(得分:7)
从.NET 4.0开始,它执行以下操作:
Array.Clear
调用将后备数组清零。这有效地使其成为O(n)操作。InvalidOperationExceptions
时活动枚举器将抛出MoveNext
。