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

string[] s = new string[2];

s[0] = "a";

s[1] = "b";

但是数组存在一些不足的地方。在数组的两个数据间插入数据是很麻烦的,而且在声明数组的时候必须指定数组的长度,数组的长度过长,会造成内存浪费,过段会造成数据溢出的错误。如果在声明数组时我们不清楚数组的长度,就会变得很麻烦。

  ArrayList: 继承Ilist接口,提供了数据存储和检索。ArrayList对象的大小是按照其中存储的数据来动态扩充与收缩的。所以,在声明ArrayList对象时并不需要指定它的长度。

ArrayList list = new ArrayList();

//新增

list.Add("ad");

list.Add(123); 

//修改数据

list[1] = 2;
//插入数据

list.Insert(0,"sfsd");

从上面的例子看,不仅插入了字符串,而且插入了数字,这样在ArrayList中插入不同类型是允许的。因为ArrayList会把所有插入其中的数据当做object类型处理。

很可能会报类型不匹配的错误,也就是ArrayList不是类型安全的。在存储或检索类型时通常发生装箱和拆箱的操作,带来很大的性能问题。

因为ArrayList存在类型不安全的特点,所以出现了泛型的概念。List是ArrayList类的泛型等效类,用法与ArrayList类似,因为List也继承IList接口。最大的区别是:

在声明List集合时,我们同时需要为List集合声明数据类型:

List<string> list = new List<string>();

//新增数据

list.Add("asd");

//修改数据

list[0] = "qwe";

 

posted on 2016-04-05 21:12  大嘴巴猫  阅读(201)  评论(0编辑  收藏  举报