Array与Array List有显着差异?

可能重复:
何时在c#中使用ArrayList而不是array []?

从内存或处理器成本的角度来看,数组和arrayList对象之间是否存在显着差异?

Array(系统命名空间)是一种数据类型,可以通过调用索引来使用。 在运行时,除非你使用复制数组并删除旧数组的方法,否则无法真正改变数组的大小。

在.NET中,Visual Studio使用特殊类来存储数据。 因此,性能实际上非常快。 这也是因为在数组中,您需要指定大小,因此,数据会一个接一个地存储。

例子:

int[] myNumbers= new int[5]; myNumbers[0] = 16; 

ArrayList(System.Collections命名空间)是一种数据类型集合。 为了填充ArrayList,可以使用.Add方法。 ArrayLists是非常动态的,当你从中添加和/或删除项目时,性能保持不变。

ArrayList的内部结构是一个数组。

例子:

 ArrayList myArray = new ArrayList(); myArray.Add(“Steph”); string str = myArray[0]; 

大多数时候,我们倾向于选择数组列表而不是数组,因为我们不知道它会变得多大。 当您知道要放入多少物品时,arrays是理想的选择。 只要有可能,建议使用数组,因为这会大大提高性能。

数组是同类数据序列,而ArrayList是异类数据序列。 这就是我们必须对ArrayLists中的每个数据进行类型转换的原因。

数组是多维的,但ArrayList始终是单维的。

数组是强类型的,并且可以作为参数使用。 如果您知道集合的长度并且已修复,则应使用数组。

ArrayLists不是强类型的,每次Insertion或Retrial都需要强制转换才能恢复原始类型。 如果您需要一个方法来获取特定类型的列表,ArrayLists就会失败,因为您可以传入包含任何类型的ArrayList。 ArrayLists在内部使用动态扩展的数组,因此在内部数组达到其容量时也会扩展内部数组的大小。

数组是一种低级数据结构,基本上映射到内存中的某个区域。 ArrayList是一个可变长度列表,实现为object数组,随着列表的增长重新分配。

因此, ArrayList具有与管理内部数组大小相关的一些开销,以及与访问列表时将对象转换为正确类型相关的更多开销。

此外,将所有内容存储为object意味着值类型在写入时被装箱,在读取时被取消装箱,这对性能极为不利。 使用List ,类似但强类型的变量大小列表可以避免此问题。

事实上,自.NET 2.0以来, ArrayList几乎不赞成使用List

数组是固定大小的连续内存块,而ArrayList(虽然您应该更喜欢自.NET 2.0以来的List)包装数组以提供动态可resize的存储。

它们之间的“差异”是,就它们被封装而言,ArrayList是可resize的,而数组则不是。 就实现而言:因为ArrayList包装(并重新分配)数组,它将需要比数组更多的内存(因为它必须知道当前的元素数量,而不是它的容量),此外还有一个ArrayList如果内部数组达到其内部容量,则需要CPU时间来重新分配和复制其内部数组。

但是,实例化ArrayList并不比分配数组更昂贵。 唯一的区别是初始化ArrayList状态所需的少量指令。 差异可以忽略不计,不值得担心。

您会发现,如果您要自己重新分配数组作为创建可resize的集合的方法,那么您最好使用ArrayList / List,因为它已经过全面测试。