分享

Array、List和ArrayList的区别与

 生命随时光流逝 2019-09-01
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

Array

定义: 

public abstract class Array:ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuraEquatable


    数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单

 

  1. string[] s = new string[3];
  2. //赋值
  3. s [0] = "a";
  4. s [1] = "b";
  5. s [2] = "c";
  6. //修改
  7. s [0] = "a1";

数组在俩数据中插入数据是很麻烦的,还有我们在声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误。

 

ArrayList

 

      ArrayList是.Net Framework提供的用于数据存储和检索的专用类,它是命名空间System.Collections下的一部分。它的大小是按照其中存储的数据来动态扩充与收缩的。所以,我们在声明ArrayList对象时并不需要指定它的长度。ArrayList继承了IList接口,所以它可以很方便的进行数据的添加,插入和移除.比如:

 

  1. ArrayList list = new ArrayList ();
  2. //新增数据
  3. list.Add ("abc");
  4. list.Add (123);
  5. //修改数据
  6. list [2] = 345;
  7. //移除数据
  8. list.RemoveAt (0);
  9. //插入数据
  10. list.Insert (0, "hello world");

 

    ArrayList存在不安全类型与装箱拆箱的缺点:

    在list中,我们不仅插入了字符串"abc",而且又插入了数字123。这样在ArrayList中插入不同类型的数据是允许的。因为ArrayList会把所有插入其中的数据都当作为object类型来处理。这样,在我们使用ArrayList中的数据来处理问题的时候,很可能会报类型不匹配的错误,也就是说ArrayList不是类型安全的。既使我们保证在插入数据的时候都很小心,都有插入了同一类型的数据,但在使用的时候,我们也需要将它们转化为对应的原类型来处理。这就存在了装箱与拆箱的操作,会带来很大的性能损耗。

List

 

    List类是ArrayList类的泛型等效类(ArrayList继承了List接口)。它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。

 

  1. List<int> list = new List<int>();
  2. //新增数据
  3. list.Add(123);
  4. //修改数据
  5. list[0] = 345;
  6. //移除数据
  7. list.RemoveAt(0);

拓展

		ArrayList list1 = new ArrayList ();

 

    这句创建了一个ArrayList的对象后把上溯到了List。此时list是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。

    问题就在于List有多个实现类,如LinkedList或者Vector等等,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢?,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用 ArrayList list = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。如果没有特别需求的话,最好使用List list = new LinkedList(); 便于程序代码的重构. 这就是面向接口编程的好处。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多