IList, List , ArrayList 通俗一点来讲就是广义的数组,C#里面称之为集合。不同于一般的狭义的数组,它们可以存放任意类型的东西,在申明或者赋值的时候指定。比如你写了一个类 Cake,然后想有一个结构来存放很多Cake的实例,那就可以用他们。
区别:
IList与List 通俗一点讲,只能存放同一类型的元素。
比如声明的时候 声明为
List<Cake> cakes=new List<Cake>(); 那么就只能用放cake的实例。
在从cakes这个变量中取出元素的时候,取到的直接就是Cake类型。不需要做强行的转换。
如果想要让一个‘数组’存放各种类型的实例,比如有Cake,Juice, Bread,那么就用ArrayList
ArrayList food=new ArrayList();
注意这里没有指定它装的是什么类型的元素,所以可以随便装咯~
当然,好处不能全让你占完了。在‘取’的时候就要麻烦一点了
ArrayList里元素默认是 Object类型的,所以需要强制转换一下。
再来说IList和List的区别:
我的理解是,IList是一个借口,而List是一个确定的类。
接口,当然就需要你去实现它的函数咯,如果你想这些函数有自己的特色,那么就自己写一个类去实现吧!
然后声明的时候:I
List<类型> kk=new 你实现的类名<类型>();
当然你可以写成:I
List<类型> kk=new List<类型>();
相当于List实现了IList (事实上C# API中是这样定义的)
如果你写成
List<类型> kk=new List<类型>();
那就意味着你的代码,那些操作List的函数不能有丝毫改变,你得按规定办事。写好是什么,你就用什么。
用法:
以上三个集合的用法都很相似,跟Java也很相似
假如有一个 List<Cake> cakes
增、删、改、查的方法:
更多的操作可以参考C# API
IList和ArrayList操作性能对比
接Killkill:
http://blog.csdn.net/killlkilll/archive/2006/12/23/1457022.aspx
Lazy: http://blog.csdn.net/lazy_/archive/2006/12/24/1458381.aspx
List<T>在创建的时候的时间消耗上明显比ArrayList要大。
List<T>对值类型操作不需要进行装箱;ArrayList需要。
鉴于这两点 ,可以得出,当数据量小的时候呢,ArrayList的操作时间上要比List<T>省,
但是在数据量大的时候呢,List<T>就要比ArrayLIst要省了。
可以来看看下面这个例子:
class
Program
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
static
void
Main(
string
[] args)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...
{
Stopwatch sw
=
new
Stopwatch();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
sw.Start();
IList
<
SomeType
>
list
=
new
List
<
SomeType
>
();
for
(
int
i
=
0
; i
<
1
; i
++
)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...
{
list.Add(
new
SomeType(i,
"
test
"
));
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
sw.Reset();
sw.Start();
ArrayList al
=
new
ArrayList();
for
(
int
i
=
0
; i
<
1
; i
++
)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...
{
al.Add(
new
SomeType(i,
"
test
"
));
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
Console.ReadLine();
}
}
class
SomeType
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
public
int
test_int;
public
string
test_string;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public
SomeType(
int
test_int,
string
test_string)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...
{
this
.test_int
=
test_int;
this
.test_string
=
test_string;
}
}
执行结果为:
00:00:00.0005187
00:00:00.0000595
但是当i超过50000条时,大家可以看看执行结果,我在这设置的是1000,0000,其结果为:
Ilist只有 03.8455183
ArrayList 有 20.8369815
Lazy: http://blog.csdn.net/lazy_/archive/2006/12/24/1458381.aspx
List<T>在创建的时候的时间消耗上明显比ArrayList要大。
List<T>对值类型操作不需要进行装箱;ArrayList需要。
鉴于这两点 ,可以得出,当数据量小的时候呢,ArrayList的操作时间上要比List<T>省,
但是在数据量大的时候呢,List<T>就要比ArrayLIst要省了。
可以来看看下面这个例子:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
执行结果为:
00:00:00.0005187
00:00:00.0000595
但是当i超过50000条时,大家可以看看执行结果,我在这设置的是1000,0000,其结果为:
Ilist只有 03.8455183
ArrayList 有 20.8369815
using System;
using System.Collections;
using System.Collections.Generic;
public class MyClass
{
public static void Main()
{
List<int> iList = new List<int>();
int[] iArray = new int[0];
ArrayList al = new ArrayList();
int count = 10;
//==========================
//增加元素
//==========================
for (int i = 0; i < count; ++i)
{
iList.Add(i);
}
iArray = new int[count];//需要初始化
for (int i = 0; i < count; ++i)
{
iArray[i] = i;
}
for (int i = 0; i < count; ++i)
{
al.Add(i);//这里有box操作
}
//==========================
//输出
//==========================
foreach (int i in iList)
{
Console.WriteLine(i);
}
foreach (int i in iArray)
{
Console.WriteLine(i);
}
foreach (object o in al)
{
Console.WriteLine(o);//这里有unbox操作
}
//============================
//继续增加元素
//============================
iList.Add(count);
iArray = new int[count + 1];//需要重新分配内存
for (int i = 0; i < count; ++i)
{
iArray[i] = i;
}
iArray[count] = count;
al.Add(count);
}
}
using System.Collections;
using System.Collections.Generic;
public class MyClass
{
public static void Main()
{
List<int> iList = new List<int>();
int[] iArray = new int[0];
ArrayList al = new ArrayList();
int count = 10;
//==========================
//增加元素
//==========================
for (int i = 0; i < count; ++i)
{
iList.Add(i);
}
iArray = new int[count];//需要初始化
for (int i = 0; i < count; ++i)
{
iArray[i] = i;
}
for (int i = 0; i < count; ++i)
{
al.Add(i);//这里有box操作
}
//==========================
//输出
//==========================
foreach (int i in iList)
{
Console.WriteLine(i);
}
foreach (int i in iArray)
{
Console.WriteLine(i);
}
foreach (object o in al)
{
Console.WriteLine(o);//这里有unbox操作
}
//============================
//继续增加元素
//============================
iList.Add(count);
iArray = new int[count + 1];//需要重新分配内存
for (int i = 0; i < count; ++i)
{
iArray[i] = i;
}
iArray[count] = count;
al.Add(count);
}
}