C#中数组 、List 、ArrayList 的区别:
数组 :
优点 :
- 数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单 .
C# 代码实例 :
string[] arr = new string[3];
//赋值
arr [0] = "a";
arr [1] = "b";
arr [2] = "c";
//修改
arr[0] = "d";
缺点 :
- 数组中插入数据很麻烦 .
- 声明数组的时候 , 必须同时指明数组的长度 , 数组的长度过长 , 会造成内存浪费 , 数组和长度过短 , 会造成数据溢出的错误 .
- 声明数组时不清楚数组的长度 , 就变得很麻烦.
数组 & ArrayList :
C#中提供了ArrayList对象来克服这些缺点 .
ArrayList :
说明 :
ArrayList是.Net Framework提供的用于数据存储和检索的专用类,它是命名空间System.Collections下的一部分。它的大小是按照其中存储的数据来动态扩充与收缩的。所以,我们在声明ArrayList对象时并不需要指定它的长度。ArrayList继承了IList接口,所以它可以很方便的进行数据的添加,插入和移除 .
优点 :
- ArrayList 增删改查都非常方便 .
- ArrayList 可以插入不同数据类型的数据 , 所有的数据都当作object类型来处理 .
C# 代码实例 :
ArrayList list = new ArrayList ();
//添加
list.Add ("a");
list.Add (123);
//删除
list.RemoveAt (1);
//修改
list [0] = "c";
//查询
print(list[0]);
缺点 :
- ArrayList不是类型安全的 , 数据类型可能不一致 , 处理ArrayList中数据的时候 , 可能会报类型不匹配的错误 .
- 既使插入的是同一类型的数据 , 但在使用的时候 , 需要将它们转化为对应的原类型来处理 . 这就存在了装箱与拆箱的操作 , 会带来很大的性能损耗 !
ArrayList & List :
ArrayList 好像是解决了数组中所有的缺点,那么它应该就是完美的了,为什么在C#2.0后又会出现List呢?
List ( 泛型 ) :
说明 :
如果List集合中插入string字符 , 会报错 , 不能通过编译 . 这样就避免了前面讲的类型安全问题与装箱拆箱的性能问题了 .
List不能被构造,但可以创建引用 .
优点:
通过允许指定泛型类或方法操作的特定类型 , 泛型功能将类型安全的任务从您转移给了编译器 . 不需要编写代码来检测数据类型是否正确 , 因为会在编译时强制使用正确的数据类型 . 减少了类型强制转换的需要和运行时错误的可能性 . 泛型提供了类型安全但没有增加多个实现的开销 .
C# 代码实例 :
List<int> list = new List<int>();
list.Add (1);
list.Add (2);
list [0] = 8;
list [1] = 5;
list.RemoveAt (0);
print (list [0]); //5
注意 :
list.RemoveAt 方法以后 后面的值都会往前移 , 第0位移除以后 , 第1位变成第0位 , print 输出的是5 .
其他 :
List list; //正确 list=null;
List list=new List(); // 是错误的用法
List list = new ArrayList(); 这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了 . 而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性 .
ArrayList 和 List 的主要区别 :
ArrayList 存在不安全类型(ArrayList会把所有插入其中的数据都当做Object来处理)装箱拆箱的操作(消耗性能)
List是接口,ArrayList是一个实现了该接口的类,可以被实例化。