它是在内部被视为数组还是被 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<>。
List<>
是一种数据结构的实现,它负责按需分配内存;它允许在任何索引处插入和删除等。因此它比简单的数组方便得多。
在幕后,当前的List<>
实现使用数组进行存储,并且执行类似数组的操作时的开销很小。增加的便利通常值得一点(如果有的话)性能差异。添加项目通常更快,因为列表分配内存块并且不需要在每次添加时进行新的分配和复制(与纯数组相比,其中Length
总是绑定到内存中的大小)。
一个普通的随机访问列表通常有一个内部数组。.NETList<T>
实现就是这样做的。其他实现,例如LinkedList<T>
使用带有引用而不是数组的元素链。更奇特的列表可能会在内部使用树进行排序。
内部数组 inList<T>
初始化为较短的长度(我相信为 4),如果您尝试在数组的最大边界之外添加,它会被扩展。由于这可能很耗时(需要复制数组),因此数组的大小会增加一倍,即当您添加第 5 个元素时,内部数组的大小会调整为 8,依此类推。