黑马程序员技术交流社区

标题: 泛型和arraylist [打印本页]

作者: з︶_伱眼裏    时间: 2013-12-30 15:20
标题: 泛型和arraylist
本帖最后由 з︶_伱眼裏 于 2013-12-31 09:28 编辑

c#里面的泛型和arraylist都有什么区别啊
作者: 卖火柴    时间: 2013-12-30 15:34
ArrayList还是数组没错,他和上两个泛型集合的区别在于,他属于弱类型集合而泛型集合属于强类型集合,懂的人可能已经知道我的意思了,就是ArrayList中存放的类型都是Object的,虽然方便,但也可能造成隐患,比如存入存取一个不同类型的值就会发生类型错误,而泛型集合是在定义时就确定类型的,List<这里定义你期望存入的类型>,这样就限制了List存取的类型,极大的避免的出错的可能性。这也是强类型集合的优势,从你新建一个类的命名空间来看,微软已经默认帮你引入了System.Collection.Generic,这说明微软也是希望我们多多使用泛型集合的。
作者: liulinaxue    时间: 2013-12-30 15:38
泛型的list中只能传你定义的值的变量,arraylist什么类型都可以传,添加到 ArrayList 中的任何引用或值类型都将隐式地向上强制转换为 Object。
作者: yuanlianxi03    时间: 2013-12-30 20:27
arraylist的内容子项是一个object类型,所以任何类型都能存储在arraylist,但这需要大量的类型转换操作,例如类类型需要隐式转换为object类型,值类型需要装箱操作,特别是装箱操作会耗费大量的资源,容易带来性能问题。
对于泛型list来说不存在这些转型操作,在指明类型参数后可以直接用来存储对应类型的对象,而不需要类型转换操作,类类型会以引用变量存储子项,值类型直接存储在泛型容器中,而且不需要装箱操作。
作者: qly2046    时间: 2013-12-30 20:34
数组
数组有很多的优点,比如说数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单,比如:
string[] s=new string[3];
//赋值
s[0]="a";
s[1]="b";
s[2]="c";
//修改
s[1]="b1";

但是,数组也存在一些不足的地方。比如在数组的两个数据间插入数据也是很麻烦的。还有我们在声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误。这样如果在声明数组时我们并不清楚数组的长度,就变的很棘手了。
针对于数组的这些缺点,C#中最先提供了ArrayList对象来克服这些缺点。
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");


作者: 如远行客    时间: 2013-12-30 21:19
泛型应该也是集合,ArrayList和HashTable都是集合。区别就是:
集合ArrayList和HashTable中存放的数据类型均为object型,这样在存储和访问的过程中要对其中存放的对象进行强制类型转换。而泛型集合则只要定义里面存放的数据类型,那么在存储和访问对象时不需要做类型转换,所以,泛型集合的效率要比集合的效率高。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2