Capacity
在.NET中List的容量应该只是受到硬件限制。
属性Capacity的真正含义,是创建List时给它预分配的容量。
一旦项的数量超过了当前的Capacity,Capacity会以
Capacity = (Capacity==0)?A_VALUE_YOU_CANNOT_SURE:(Capacity*2)
的方式增长。
当使用默认构造函数创建一个List时,Capacity就是0。(或者你非要用一个0作为capacity参数调用构造)
所以当Capacity是0时,我们为List添加了第一个项目后,Capacity是多少呢?
对,是A_VALUE_YOU_CANNOT_SURE。
不过,在.NET2.0和.NET4.5中,这个值看上去都是4。
System.Diagnostics.Debug.WriteLine(string.Format("default capacity is : {0}", new List<string>().Capacity)); int initCapacity = 0; List<string> l = new List<string>(initCapacity); System.Diagnostics.Debug.WriteLine(string.Format("constructe a list with capacity: {0}", l.Capacity)); for (int u = 0; u < 65; ++u) { System.Diagnostics.Debug.WriteLine(string.Format("Count: {0}, Capacity: {1}", l.Count, l.Capacity)); //l.TrimExcess(); //System.Diagnostics.Debug.WriteLine(string.Format(" TrimExcess() -> Count: {0}, Capacity: {1}", l.Count, l.Capacity)); l.Add("1"); }
输出
default capacity is : 0 constructe a list with capacity: 0 Count: 0, Capacity: 0 Count: 1, Capacity: 4 Count: 2, Capacity: 4 Count: 3, Capacity: 4 Count: 4, Capacity: 4 Count: 5, Capacity: 8 Count: 6, Capacity: 8 Count: 7, Capacity: 8 Count: 8, Capacity: 8 Count: 9, Capacity: 16 Count: 10, Capacity: 16 Count: 11, Capacity: 16 Count: 12, Capacity: 16 Count: 13, Capacity: 16 Count: 14, Capacity: 16 Count: 15, Capacity: 16 Count: 16, Capacity: 16 Count: 17, Capacity: 32 Count: 18, Capacity: 32 Count: 19, Capacity: 32 Count: 20, Capacity: 32 Count: 21, Capacity: 32 Count: 22, Capacity: 32 Count: 23, Capacity: 32 Count: 24, Capacity: 32 Count: 25, Capacity: 32 Count: 26, Capacity: 32 Count: 27, Capacity: 32 Count: 28, Capacity: 32 Count: 29, Capacity: 32 Count: 30, Capacity: 32 Count: 31, Capacity: 32 Count: 32, Capacity: 32 Count: 33, Capacity: 64 Count: 34, Capacity: 64 Count: 35, Capacity: 64 Count: 36, Capacity: 64 Count: 37, Capacity: 64 Count: 38, Capacity: 64 Count: 39, Capacity: 64 Count: 40, Capacity: 64 Count: 41, Capacity: 64 Count: 42, Capacity: 64 Count: 43, Capacity: 64 Count: 44, Capacity: 64 Count: 45, Capacity: 64 Count: 46, Capacity: 64 Count: 47, Capacity: 64 Count: 48, Capacity: 64 Count: 49, Capacity: 64 Count: 50, Capacity: 64 Count: 51, Capacity: 64 Count: 52, Capacity: 64 Count: 53, Capacity: 64 Count: 54, Capacity: 64 Count: 55, Capacity: 64 Count: 56, Capacity: 64 Count: 57, Capacity: 64 Count: 58, Capacity: 64 Count: 59, Capacity: 64 Count: 60, Capacity: 64 Count: 61, Capacity: 64 Count: 62, Capacity: 64 Count: 63, Capacity: 64 Count: 64, Capacity: 64