1:根本不存在一个动态增长的容器供我们使用。所谓集合就是在内部定义一个一定大小的数组,这个数组的容量也就是Capacity属性,如果没有设置,默认是一个0长度的数组。当开始添加第一个数据时,数组的长度会被设为4。
2:当我们调用ADD方法为集合添加元素时,它会判断集合内部的数组是否已填充满,如果填充满了,就会实例化一个新的数组,数组容量为原数组容量的2倍。然后把原数组中的数据COPY到新的数组中,然后原数组会成为垃圾回收的对象被GC收集。
3:如果数据量不大或能基本能确定大小的情况下,尽量使用数组而不是集合,因为多次创建新数组并COPY数据会对性能造成损伤(虽然微乎其微)。
4:如果还有疑问话,可以定义个集合做下测试,来证明我的说法是否正确
ArrayList list = new ArrayList();
Console.WriteLine(list.Count);
Console.WriteLine(list.Capacity);
for(int i =0 ;i <5 ; i++) list.Add("Hello");
Console.WriteLine(list.Count);
Console.WriteLine(list.Capacity);
for (int j = 0; j < 5; j++) list.Remove("Hello");
Console.WriteLine(list.Count);
Console.WriteLine(list.Capacity);
看看会输出什么
总结:
ArrayList是一个内部控制动态增长的数组,而且所有参数都是Object类型的,而普通数组(Array)则可以指定类型,比如:int[] intArray = new intArray[10]; |