List<T>,ArrayList,IEnumerable的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了List<T>,ArrayList,IEnumerable的区别相关的知识,希望对你有一定的参考价值。

如题,我用vs2008,c#.net,3个都是集合类型,3个的区别是什么呢

参考技术A 数据源不只是Ilist这样的,还可能是DataTable或者其他的
语言集成查询 (LINQ) 查询适用于实现 IEnumerable<(Of <(T>)>) 接口或 IQueryable 接口的数据源。DataTable 类不实现上述任何一个接口,因此您必须调用 AsEnumerable 方法来将 DataTable 用作 LINQ 查询的 From 子句中的源。

ICollection主要针对静态集合;IList主要针对动态集合
IEnumerable<T>继承自IEnumerable
ICollection<T>继承自IEnumerable<T>
IList<T>继承自ICollection<T>
IEnumerable接口
实现了IEnumerable接口的集合表明该集合能够提供一个enumerator(枚举器)对象,支持当前的遍历集合。IEnumerable接口只有一个成员GetEnumerator()方法。
IList接口和ArrayList类的目的是实现动态数组,ArrayList是IList的一个实现。

看看MSDN

ArrayList与List<T>笔记

ArrayList是在System.Collections命名空间的一个类, 通过Add的方法添加一个项, 当进到这个类的元数据时, 可以看到这个方法的参数是一个object

 public virtual int Add(object value)

所以在添加一个项时需要进行一次装箱的操作, 读取一个数据时需要一个拆箱的操作, 所以用ArrayList必然影响性能, 特别是项较多的时候进行读写, 至少要进行一次的装箱一次拆箱, 所花的时候也应该是更多

 

 List<T>通过Add方法添加一个项是通过直接的类型来添加 public void Add(T item) 所以不需要再进行装箱与拆箱, 可以节省部分时间, 看下面的代码测试:

 

技术分享代码

 

 

当你运行看结果时你就知道相差的结果了, 所以在代码当中, 尽量使用List<int>来代替ArrayList

以上是关于List<T>,ArrayList,IEnumerable的区别的主要内容,如果未能解决你的问题,请参考以下文章

ArrayList与List<T>笔记

Java ArrayList去重

哪个更好?数组、ArrayList 或 List<T>(在性能和速度方面)

List<T>,ArrayList,IEnumerable的区别

java中,如何在二维的ArrayList中添加List

JAVA List<T> 如何初始化