A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© з︶_伱眼裏 中级黑马   /  2013-12-30 15:20  /  1696 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 з︶_伱眼裏 于 2013-12-31 09:28 编辑

c#里面的泛型和arraylist都有什么区别啊

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

5 个回复

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

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
数组
数组有很多的优点,比如说数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单,比如:
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");

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
arraylist的内容子项是一个object类型,所以任何类型都能存储在arraylist,但这需要大量的类型转换操作,例如类类型需要隐式转换为object类型,值类型需要装箱操作,特别是装箱操作会耗费大量的资源,容易带来性能问题。
对于泛型list来说不存在这些转型操作,在指明类型参数后可以直接用来存储对应类型的对象,而不需要类型转换操作,类类型会以引用变量存储子项,值类型直接存储在泛型容器中,而且不需要装箱操作。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
泛型的list中只能传你定义的值的变量,arraylist什么类型都可以传,添加到 ArrayList 中的任何引用或值类型都将隐式地向上强制转换为 Object。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
ArrayList还是数组没错,他和上两个泛型集合的区别在于,他属于弱类型集合而泛型集合属于强类型集合,懂的人可能已经知道我的意思了,就是ArrayList中存放的类型都是Object的,虽然方便,但也可能造成隐患,比如存入存取一个不同类型的值就会发生类型错误,而泛型集合是在定义时就确定类型的,List<这里定义你期望存入的类型>,这样就限制了List存取的类型,极大的避免的出错的可能性。这也是强类型集合的优势,从你新建一个类的命名空间来看,微软已经默认帮你引入了System.Collection.Generic,这说明微软也是希望我们多多使用泛型集合的。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马