如何名单 内部映射?(How is List internally mapped?)

2019-09-20 19:24发布

它是否在内部得到处理数组或是否得到视为一个完全不同的类型由CLR?

我想实现整数值到列表中。

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

我创建了一个整数数组

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

Array返回更好的时间跨度结果。 那么,为什么人们宁愿名单<>。

Answer 1:

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

引擎盖下,当前List<>实现使用用于存储的阵列,并且这样做阵列状的操作当所述开销最小。 更加方便,通常是值得的一点(如果在所有相关的)的性能差异。 添加项目通常更快,因为列表分配的内存块,并且不需要新的分配并复制每个插件(相对于纯数组,其中Length总是必然的大小在内存中)。



Answer 2:

一个正常的随机接入列表通常具有一个内部数组。 在.NET List<T>实现这一点。 其它实施方式中诸如LinkedList<T>使用具有引用,而不是阵列元件的链。 更奇特的名单可以在内部使用的树木进行排序。

在内部数组List<T>被初始化具有短长度(4相信),并且如果试图在阵列的最大边界之外添加,它已展开。 由于这可能是耗时(阵列需要复制),当添加第五元件内部数组大小调整为长度8等的阵列大一倍,即得。



文章来源: How is List internally mapped?