5

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

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

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

对比

我创建了一个整数数组

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

数组返回更好的时间跨度结果。那么为什么人们更喜欢 List<>。

4

2 回答 2

5

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

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

于 2012-08-04T09:50:00.487 回答
1

一个普通的随机访问列表通常有一个内部数组。.NETList<T>实现就是这样做的。其他实现,例如LinkedList<T>使用带有引用而不是数组的元素链。更奇特的列表可能会在内部使用树进行排序。

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

于 2012-08-04T09:54:02.113 回答