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(); 便于程序代码的重构. 这就是面向接口编程的好处。

猜你喜欢

转载自blog.csdn.net/yuewei19/article/details/78260743
今日推荐