变量、数组、泛型、集合

来源:互联网 发布:湖泊数据下载 编辑:程序博客网 时间:2024/05/19 09:50

 发展

   最开始用内存中一个位置映射一个值,用变量来“使用”这个值。

     进一步发展,用变量来引用一组值,这就是数组。由数组概念,发展出链表、堆、栈,进行排序、检索等。但这并不能完全表达,由此发展出集合概念,它是更强大的数组,都依赖于Object基类。

     随之而来的是集合中元素并不一定是一样的,于是都得转为Object,涉及到装箱,使性能下降,特别是元素量巨大时。由于我们一般使用同一类型(强类型)更方便操作。由此产生了泛型

     泛型,就是把里面的元素强制指定为特定的类型,属于集合的进化版。

数组

    在分配空间上,数组分配在一块连续的数据空间上,因此在分配空间时必须确定大小。


数组优点:

   1)可以利用偏移地址来访问元素,效率高

   2)可以使用折半方法查找元素,效率较高

数组缺点:

   1)空间连续,存储效率低;

   2)插入和删除元素效率比较低,且比较麻烦


集合

    数组功能很强大,但Array基类并没为数组提供更多的功能,比如排序、动态分配内存。为了更强大的功能产生了集合。 

   集合(Collections)名称空间是System名称空间的一部分,它提供系列高级功能。

            对不同的用处,System.Collections名称空间提供了几个强大的类:

                      ArrayList    实现一个数组,其大小在添加元素时自动增加大小(不必烦恼数组的上限或用ReDim、                                                  Preserve)

                      BitArray      管理以位值存储的布尔数组

                      Hashtable   实现由键组织的值的集合(Key,Value),排序是基于键的散列完成的(哈希函数)

                      Queue         实现先进先出集合(排序方式)

                      Stack            实现后进先出集合

                      SortedList    实现带有相关的键的值的集合,该值按键来排序,可以通过键或索引来访问

    和数组相比,使用大小根据保存的元素数确定,定义时不用确定大小。增加、删除、访问数组中的数据时也比较方便。

    但集合不是类型安全的。使用集合元素时,需要拆装箱,相对于简单的赋值而言,拆装箱需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个全新的对象。其次,拆箱所需的强制转换也需要进行大量的计算。总之,带来了很大的性能消耗。


泛型

       集合中,任何引用或值类型都将隐式地向上强制转换为Object。如果项是值类型,添加到列表中时,进行装箱操作,在检索时进行取消装箱操作。这样,强制转换以及装箱和拆箱操作都会降低性能。

      另一个限制是缺少编译时类型检查。同一个集合可接收不同类型,所有项都强制转换为 Object,在编译时无法检查是否可以收这种类型,还是人为错误输入了另一个类型,同时智能感应只会提示Object的方式,使得检查错误变得艰难。

      如果我们对其中的类型进行一些限制,使之成为统一的类型,虽然稍微增加了编码的复杂性,但好处是可以创建一个 更安全并且速度更快的列表, 校验错误也变得容易。

     鉴于这种情况,催生了泛型的产生。


     泛型通常使用List(of   T)形式,List是类型(或者类)的名称 ,字母T是点位符类似于参数。它表示 必须提供一个用来定制泛型的特定类型值,同时也限定的它只能是这个类型。


   泛型有两种形式:泛型类型和泛型方法

                        List(of  T)是泛型类型,定义了完整的类型或类的模板。

                        泛型 方法是一种方法模板,使用时必须指明方法使用的“具体类型”。

                         格式:方法名(of T)(参数)



0 0
原创粉丝点击