为什么List <double>类型以这种方式运行?

Ton*_*ony 1 c# list

这是一个小程序,用于添加,删除,插入项目(双)到Ilist集合中.

 class ProgramL
    {
        static void Main(string[] args)
        {
            IList<double> myList = new List<double>();
            myList.Add(1.54);
            myList.Add(56.54);
            myList.Insert(1,58.54);
            myList.Add(11.44);
            myList.Add(121.44);
            myList.Add(111.44);
            myList.Add(1221.44);
            myList.Add(1331.44);
            myList.Add(161.44);
            myList.Add(21.58);
            myList.Remove(21.58);
            Console.ReadLine();
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以在添加,插入和删除操作之后还剩下9个项目.但根据图片,为什么该列表包含16个项目.最后7项初始化为0.0值.

在此输入图像描述

任何人都可以向我解释一下吗?

谢谢

Mar*_*zek 5

有两个数字:

  • Count - 添加到列表中的实际元素数
  • Capacity - 用于存储引擎盖下元素的数组大小

它是为了提高性能并减少用于List<T>存储元素的底层数组的分配数量.

当您实例化列表并添加第一个元素时,它将使用初始容量(4个元素)创建.添加元素并且现有容量不足时,将重新分配基础数组以包含两倍的元素.这是因为重新分配数组非常昂贵,并且您不希望每次将元素添加到列表时都会发生这种情况.

您可以使用TrimExcess方法使基础数组大小更接近集合中的项目数.

如果不将新元素添加到集合中,则此方法可用于最小化集合的内存开销.但是,重新分配和复制大型文件的成本List<T>可能相当大,因此TrimExcess如果列表容量超过90%,则该方法无效.这避免了相对较小的增益导致大的重新分配成本.