简单的旧学校C#问题:ArrayList
是Array
还是List
?两者之间的差异是巨大的,所以我很好奇是否有人知道ArrayList
存储数据的方式?
答案 0 :(得分:11)
ArrayList
表现得像一个列表(特别是,它的元素数量可以增长,不像一个数组),但是它由一个数组支持,它将根据需要动态调整大小。因此名称为ArrayList
。
表现得像列表的东西不必由数组支持(例如,它们可以是链接列表),但ArrayList
是。
答案 1 :(得分:1)
.NET Framework包含一个提供此功能的数据结构 - System.Collections.ArrayList类ArrayList
维护一个内部对象数组,并随着添加到ArrayList的元素数量的增加而自动调整数组大小。因为ArrayList使用对象数组,所以开发人员可以添加任何类型字符串,整数,FileInfo对象,Form实例,任何东西。
虽然ArrayList
提供了比标准阵列更大的灵活性,但这种灵活性是以性能为代价的。因为ArrayList
存储了一个对象数组,所以当从ArrayLis
t读取值时,您需要将其显式地转换为存储在指定位置的数据类型。回想一下值类型的数组 - 例如 System.Int32 , System.Double , System.Boolean 等等 - 是以未装箱的形式在托管堆中连续存储。但是,ArrayList's
内部数组是一个对象引用数组。因此,即使您的ArrayList
只存储了值类型,但每个ArrayList
元素都是对盒装值类型的引用。
除了从List继承的成员之外,您还可以调用ArrayList
个特定方法并使用ArrayList
个特定成员。
答案 2 :(得分:0)
除了其他差异之外,另一个区别是ArrayList不是强类型的,数组列表可以添加从对象派生的任何类型的元素,如下面的代码所示
ArrayList myArrayList = new ArrayList();
myArrayList.Add(1);
myArrayList.Add("test");
但是数组和IList是强类型的,即我们可以利用它们中的编译类型检查,例如
int[] myarray = new int[5];
myarray[0] = 1; // This is correct
myarray[1] = "test"; // compile time error