.NET中常用的知识点--数组、ArrayList和List的区别

来源:互联网 发布:红蜘蛛破解软件 编辑:程序博客网 时间:2024/06/01 18:55

数组、List和ArrayList的区别:

1. 数组概述:数组是一种数据结构,包含同一类型的多个元素。

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

  //初始化
  string[] s=new string[3];  //赋值  s[0]="a"; s[1]="b"; s[2]="c";  //修改  s[1]="b1";

     缺点: 声明数组是,必须同时指明数组的长度。

                  数组长度过长,会造成内存浪费,数组长度过短,会造成数据溢出的错误。

                  所以在不确定数组长度的情况下,就需要用到ArrayList了。


2.ArrayList概述:ArrayList是.net Framework提供的用于数据存储和检索的专用类。

   命名空间:System.Collections下的一部分。

   继承接口:IList接口。

   优点:大小按照其中存储的数据来动态扩充与收缩,灵活方便。

              声明时不需要指定它的长度。

  //声明
  ArrayList list = new ArrayList();  //新增数据  list.Add("abc"); list.Add(123);  //修改数据  list[2] = 345;  //移除数据  list.RemoveAt(0);  //插入数据   list.Insert(0, "hello world");
     缺点:ArrayList会把所有插入其中的数据都当做object类型来处理。

               ArrayList是类型不安全的。比如:在我们插入值类型1,2,3后,再在后边插入引用类型‘a’,'b','c',会报类型不匹配的错误。

               性能损失很大。比如:我们在插入同一类型的数据时,ArrayList还是会见他们转化为object类型,这就存在了装箱与拆箱的操作,会带来很大的性能损耗。

               所以需要用到List.

3. List概述:List类似ArrayList类的泛型等效类。

                       List是一个具体的实现类。

                       继承了IList接口。

                       声明时需要为其声明List集合内数据的对象类型。如:List<int> lsstr=new List<int>();

                       List不能被构造。

     优点:类型安全:

  //声明
  List<int> list = new List<int>();  //新增数据  list.Add(123);  //修改数据   list[0] = 345;  //移除数据  list.RemoveAt(0);
    上例中。如果我们往List<int> 集合中插入string字符‘hello‘,IDE就会报错,不能通过编译,这样就避免了类型安全问题与装箱拆箱的性能问题了。

     ArrayList和List的区别:

     List不能被构造,而ArrayList可以被构造。     

  List list=new List();    //错误,不能被构造
  ArrayList alist=new ArrayList();   //正确,可以被构造
  List<string> lsstr=new List<int>();  //正确的写法
  //注意:
  List list=new ArrayList();//正确,将ArrayList转化为了List,此时使用的List的属性和方法。
  ArrayList alist=new ArrayList();//正确,此时使用的是ArrayList的属性和方法。

4.扩展:

    装箱与拆箱:1.装箱:值类型转换为引用类型为装箱。比如:int A=3, object B=(object)A;

                            2.拆箱:引用类型转换为值类型为拆箱。比如:object A='3', int B=(int)A;

   泛型:概念:泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。

                           泛型为.net框架引入了类型参数(type parameters)的概念。类型参数在设计类和方法时,不必确定一个或多个具体参数,其中的具体参数可延迟到客户代码中                            声明和实现,比如MyList<T> ; 客户代码这样调用。MyList<int>,MyList<string>或者MyList<MyClass>。避免了运行时类型转换或装箱操作的代价和风险。



此为整理后发布,原博客地址:http://www.cnblogs.com/a164266729/p/4561651.html

1 0
原创粉丝点击