简单的老式 C# 问题:是ArrayList
anArray
还是 a List
?两者之间的差异是巨大的,所以我很好奇是否有人知道ArrayList
存储数据的方式?
3 回答
ArrayList
表现得像一个列表(特别是,它的元素数量可以增加,不像数组),但它由一个数组支持,该数组将根据需要动态调整大小。因此得名ArrayList
。
表现得像列表的东西不必由数组支持(例如,它们可以是链表),但ArrayList
确实如此。
.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
Apart from other differences, one more difference is that ArrayList are not strongly typed i.e array list can add any type of element which is derived from object as shown in the code below
ArrayList myArrayList = new ArrayList();
myArrayList.Add(1);
myArrayList.Add("test");
but array and IList are strongly typed i.e we can take advantage of compile type checking in both of them e.g
int[] myarray = new int[5];
myarray[0] = 1; // This is correct
myarray[1] = "test"; // compile time error