c#中List的内部工作
本文关键字:内部 工作 List | 更新日期: 2023-09-27 18:03:09
谁能解释一下List<T>
是如何在c#内部工作的?
public List<ConvData> pdetails = new List<ConvData>();
如何存储?当我们调用pdetails.Add();
List的实现方式与c++的vector相同,这意味着实现分配一个预定义大小的数组,填充该数组,当您想要添加元素且数组已满时,实现分配一个更大的新数组,将所有值复制到新数组中,然后添加新值。这导致添加时的平均性能为0(1),但并非总是如此。
看看微软的参考源代码,看看它是如何工作的。
现在,Add
方法看起来像这样:
// Adds the given object to the end of this list. The size of the list is
// increased by one. If required, the capacity of the list is doubled
// before adding the new element.
//
public void Add(T item) {
if (_size == _items.Length) EnsureCapacity(_size + 1);
_items[_size++] = item;
_version++;
}
开头是这样的:
public class List<T> : IList<T>, System.Collections.IList, IReadOnlyList<T>
{
private const int _defaultCapacity = 4;
private T[] _items;
[ContractPublicPropertyName("Count")]
private int _size;
注意,private T[] _items;
是列表在内部存储的方式。
.Add(...)
:
public void Add(T item) {
if (_size == _items.Length) EnsureCapacity(_size + 1);
_items[_size++] = item;
_version++;
}