C# 数组Array、ArrayList和List

相同点

Array、ArrayList和List都是从IList派生出来的,它们都实现了IEnumerable接口。

不同点

  1. 数组的容量是固定的,只能一次获取或设置一个元素的值,而ArrayList或List的容量可根据需要自动扩充、修改、删除或插入数据。
  2. 数组可以是一维数组、二维数组和多维数组,而ArrayList或 List始终只具有一个维度。但是,可以轻松创建数组列表或列表的列表。特定类型(Object 除外)的数组的性能优于ArrayList的性能。这是因为ArrayList的元素属于Object类型;所以在存储或检索值类型时通常发生装箱和取消装箱操作。不过,在不需要重新分配时(即最初的容量十分接近列表的最大容量),List的性能与同类型的数组十分相近。
  3. 在决定使用 List类还是使用ArrayList 类(两者具有类似的功能)时,List类在大多数情况下执行得更好并且是类型安全的。如果对List类的类型使用引用类型,则两个类的行为是完全相同的。但是,如果对类型使用值类型,则需要考虑实现装箱和拆箱问题。
  4. 数组是抽象类不能被实例化,所有数组的定义都从它派生而来。
  5. ArrayList是动态数组,可以自由伸缩数组的大小。实质上Array抽象类也提供了Resize方法动态改变数组的大小。
  6. List是集合类型,并且是一个支持泛型的集合类型。

 

总结

1、数组的容量固定,而ArrayList或List<T>的容量可根据需要自动扩充。

2、数组可有多个维度,而 ArrayList或 List< T> 始终只有一个维度。(可以创建数组列表或列表的列表)

3、特定类型的数组性能优于 ArrayList的性能(不包括Object,因为 ArrayList的元素是 Object ,在存储或检索值类型时通常发生装箱和取消装箱操作)。

4、 ArrayList 和 List<T>基本等效,如果List< T> 类的类型T是引用类型,则两个类的行为是完全相同的。如果T是值类型,需要考虑装箱和拆箱造成的性能损耗。List<T> 是类型安全。

 

 

array.length是二维数组中的主数组的长度,可以表示数组的行数

array[i].length是其中分数组的长度,即第i行的长度
此外 还有方法GetLength(),获取指定维度的的数量

若是二维数组,则有
array.GetLength(0);//获取第一维的长度,即行数
array.GetLength(1);//获取第二维的长度,即列数

四维数组
int[,] arr = new int[9, 8, 7, 6];

arr.Rank;//返回4
arr.GetLength(0);//返回9
arr.GetLength(1);//返回8
arr.GetLength(2);//返回7
arr.GetLength(3);//返回6
arr.GetUpperBound(0)+1;//返回9
arr.Length;//返回3024

容易混淆的还有size()方法,size()方法是针对集合而言,例如List,Set和Map都有size()方法,此外string类最初只有length(),引入STL之后,为了兼容也加入了size()方法,两者没有区别。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值