Array、List和ArrayList的区别与

Array

定义: 

public abstract class Array:ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuraEquatable


    数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单

 

		string[] s = new string[3];
		//赋值
		s [0] = "a";
		s [1] = "b";
		s [2] = "c";
		//修改
		s [0] = "a1";

数组在俩数据中插入数据是很麻烦的,还有我们在声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误。

 

ArrayList

 

      ArrayList是.Net Framework提供的用于数据存储和检索的专用类,它是命名空间System.Collections下的一部分。它的大小是按照其中存储的数据来动态扩充与收缩的。所以,我们在声明ArrayList对象时并不需要指定它的长度。ArrayList继承了IList接口,所以它可以很方便的进行数据的添加,插入和移除.比如:

 

		ArrayList list = new ArrayList ();
		//新增数据
		list.Add ("abc");
		list.Add (123);
		//修改数据
		list [2] = 345;
		//移除数据
		list.RemoveAt (0);
		//插入数据 
		list.Insert (0, "hello world");

 

    ArrayList存在不安全类型与装箱拆箱的缺点:

    在list中,我们不仅插入了字符串"abc",而且又插入了数字123。这样在ArrayList中插入不同类型的数据是允许的。因为ArrayList会把所有插入其中的数据都当作为object类型来处理。这样,在我们使用ArrayList中的数据来处理问题的时候,很可能会报类型不匹配的错误,也就是说ArrayList不是类型安全的。既使我们保证在插入数据的时候都很小心,都有插入了同一类型的数据,但在使用的时候,我们也需要将它们转化为对应的原类型来处理。这就存在了装箱与拆箱的操作,会带来很大的性能损耗。

List

 

    List类是ArrayList类的泛型等效类(ArrayList继承了List接口)。它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。

 

		List<int> list = new List<int>();
		//新增数据
		list.Add(123);
		//修改数据 
		list[0] = 345;
		//移除数据
		list.RemoveAt(0);

拓展

		ArrayList list1 = new ArrayList ();

 

    这句创建了一个ArrayList的对象后把上溯到了List。此时list是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。

    问题就在于List有多个实现类,如LinkedList或者Vector等等,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢?,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用 ArrayList list = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。如果没有特别需求的话,最好使用List list = new LinkedList(); 便于程序代码的重构. 这就是面向接口编程的好处。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值