ArrayList是一个数组还是一个List?

时间:2013-08-05 04:15:38

标签: c# data-structures

简单的旧学校C#问题:ArrayListArray还是List?两者之间的差异是巨大的,所以我很好奇是否有人知道ArrayList存储数据的方式?

3 个答案:

答案 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