List <t>如何在内部映射?</t>

时间:2012-08-04 09:45:53

标签: .net arrays list generics clr

它内部被视为一个数组还是被CLR视为完全不同的类型?

我正在尝试将整数值实现到列表中。

List<int> lst = new List<int>();
lst.Add(3);
lst.Add(4);

VS

我创建了一个整数数组

int[] arr = new int[2];
arr[0] = 3;
arr[1] = 4;

Array返回更好的时间跨度结果。那么为什么人们更喜欢List&lt;&gt;。

2 个答案:

答案 0 :(得分:5)

List<>是数据结构的一种实现,它负责按需分配内存;它允许在任何索引等处插入和删除。因此它比简单数组更方便。

在幕后,当前的List<>实现使用一个数组进行存储,并且在进行类似数组操作时的开销很小。增加的便利性通常值得一点(如果相关的话)性能差异。添加项通常更快,因为列表分配了内存块,并且不需要在每次添加时进行新的分配和复制(与纯数组相比,Length始终绑定到内存中的大小)。 / p>

答案 1 :(得分:1)

普通随机访问列表通常具有内部数组。 .NET List<T>实现就是这样做的。其他实现(如LinkedList<T>)使用带引用的元素链而不是数组。更多异国情调的列表可以在内部使用树木进行订购。

List<T>中的内部数组初始化为较短的长度(我相信4),如果您尝试在数组的最大边界外添加,则会扩展它。由于这可能很耗时(需要复制数组),因此数组的大小加倍,即当您添加第5个元素时,内部数组的大小将调整为8,依此类推。