我经常使用ArrayList
而不是'正常' array[]
.
当我使用时ArrayList
,我觉得好像在欺骗(或者懒惰),什么时候可以使用ArrayList
一个阵列?
数组是强类型的,并且可以作为参数使用.如果您知道集合的长度并且已修复,则应使用数组.
ArrayLists不是强类型的,每次Insertion或Retrial都需要一个强制转换来恢复原始类型.如果您需要一个方法来获取特定类型的列表,ArrayLists就会失败,因为您可以传入包含任何类型的ArrayList.ArrayLists在内部使用动态扩展的数组,因此在内部数组达到其容量时也会扩展内部数组的大小.
你真正想要使用的是通用列表List
.这具有Array和ArrayLists的所有优点.它是强类型的,它支持可变长度的项目.
除了鲍勃和弗雷德里克的回应,我想指出虽然数组有协方差,但通用列表却没有.例如,类型的阵列MyChildClass[]
可以容易地浇铸MyParentClass[]
,而List
不能浇铸List
,至少不能直接.
如果你需要协方差,要么使用数组,要使用LINQ的Cast()方法或其他方法单独转换每个项目或等待C#4.
另一个想法是变异; array(T[]
)完全可变,无法保护.List
没有提供任何有用的扩展点,但像Collection
(或许多其他IList
实现)这样的东西允许你添加代码,例如,在添加项目之前检查项目; 同样,您可以拥有只读IList
实现,这对于需要不变性的线程安全非常有用.
我倾向于在内部方法逻辑(可能作为局部变量),作为params
参数,或在一些高度优化的情况下使用数组,我知道项目的长度,我知道代码选择不改变它(作为一个私人领域).除此之外,List
等往往更常见,因为它们在添加/删除项目时的开销要小得多.
除非代码的那部分绝对是性能关键的,否则使用ArrayList非常好.