C# 分拣列表容量如何工作

C# 分拣列表容量如何工作,c#,sortedlist,C#,Sortedlist,我想知道SortedList capacity属性是如何工作的。 在构造函数中,我将容量设置为2,但我可以添加更多元素。 为什么? SortedList SortedList=新的SortedList{Capacity=2}; 分类列表。添加(0,“零”); 分类列表。添加(1,“一”); 分类列表。添加(2,“两”); 分类列表。添加(3,“三”); ForEach(v=>Console.WriteLine(v)); 容量始终大于或等于计数。如果在添加元素时计数超过了容量,则在复制旧元素并添加

我想知道SortedList capacity属性是如何工作的。 在构造函数中,我将容量设置为2,但我可以添加更多元素。 为什么?

SortedList SortedList=新的SortedList{Capacity=2};
分类列表。添加(0,“零”);
分类列表。添加(1,“一”);
分类列表。添加(2,“两”);
分类列表。添加(3,“三”);
ForEach(v=>Console.WriteLine(v));

容量始终大于或等于计数。如果在添加元素时计数超过了容量,则在复制旧元素并添加新元素之前,通过重新分配内部数组自动增加容量


默认情况下,任何列表(已排序或未排序)的容量从0开始,或者从构造函数中设置的任何容量开始。当您添加超过该容量的新项时,基础数据存储将以以前容量的两倍重新初始化,并复制引用。
SortedList
的构造函数的
initialCapacity
参数说明该参数指定列表的初始容量,不是它的最终能力:

initialCapacity
类型:
System.Int32
SortedList
对象可以包含的元素的初始数目

当您知道要添加到列表中的元素数量时,此参数用于减少重新分配的数量。此参数不会改变以下事实:
SortedList
是一个动态大小的集合,在向其中添加元素时可以进行扩展

列表的
容量属性的备注提供了进一步的澄清:

Capacity
SortedList
对象可以存储的元素数
Count
是实际位于
SortedList
中的元素数

容量
始终大于或等于
计数
。如果在添加元素时
Count
超过
容量
,则在复制旧元素并添加新元素之前通过重新分配内部数组自动增加容量


容量
!=<代码>限制
。通常,容量是指最初分配内存以保持的元素数。根据MSDN:
,SortedList的容量是SortedList可以保持的元素数。当元素添加到SortedList中时,容量会根据需要自动增加,方法是重新分配内部阵列。
其目的是当您知道将存储许多项目时,限制所需的动态分配数量,通常会问“我想知道如何工作”首先要做的是阅读文档。谷歌搜索你的问题标题的第二个点击点(这是在这个问题之后的第二个)是在“备注”下的第二段中回答你问题的文档。我不得不不费吹灰之力地投反对票。事实上,扩展一个列表可能会花费很多钱。它需要分配另一个更大的阵列。转移所有现有元素。然后让现有数组超出范围。更不用说GC也必须在某个时候清理旧数组了。我们也不能说每次扩张会有多大/多小。所以这可能会发生很多次。因此,如果你知道最终列表可能有多大,请在施工期间给出该数字。它可以为您节省大量内存和处理开销。
SortedList<int, string> sortedList = new SortedList<int, string>{ Capacity = 2 };
sortedList.Add(0, "zero");
sortedList.Add(1, "one");
sortedList.Add(2, "two");
sortedList.Add(3, "three");

sortedList.Values.ToList().ForEach(v => Console.WriteLine(v));