Chinaunix首页 | 论坛 | 博客
  • 博客访问: 361735
  • 博文数量: 150
  • 博客积分: 3423
  • 博客等级: 中校
  • 技术积分: 1005
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-15 09:04
文章分类

全部博文(150)

文章存档

2012年(2)

2011年(148)

分类: 嵌入式

2011-07-18 14:36:05

1、Array:提供创建、操作、搜索和排序数组的方法,因而在公共语言运行库中用作所有数组的基类。命名空间:System。

        Array类实现 System.Collections.Generic.IList<(Of <(T>)>)、System.Collections.Generic.ICollection<(Of <(T>)>) 和 System.Collections.Generic.IEnumerable<(Of <(T>)>) 泛型接口。将某一数组强制转换为这三种接口之一时需要注意的关键一点是,添加、插入或移除元素的成员会引发NotSupportedException异常。与大多数类不同,Array 提供CreateInstance方法,以便允许后期绑定访问,而不是提供公共构造函数。不保证会对 Array 进行排序。 在执行需要对Array 进行排序的操作(如BinarySearch)之前,必须对 Array 进行排序。数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!

        Array类定义了若干静态函数,提供对数组类型的变量的操作方法。例如:

            Array aa = Array.CreateInstance(typeof(String), 9);
            Array bb = Array.CreateInstance(typeof(String), 9);
            Array.Copy(aa, bb, 10);      //将aa数组中的10个元素复制到bb数组中;
            Array.Reverse(aa);             //反转整个一维 Array 中元素的顺序;此方法的运算复杂度为 O(n),
                                                      //其中 n 是 array 的 Length。
            Array.Sort(aa);                    //对一维 Array 对象中的元素进行排序。

2、ArrayList:使用大小可按需动态增加的数组实现 IList 接口。命名空间:System.Collections。

        ArrayList 的容量是 ArrayList 可以保存的元素数。随着向 ArrayList 中添加元素,容量通过重新分配按需自动增加。可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。使用整数索引可以访问此集合中的元素。 此集合中的索引从零开始。ArrayList 接受 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing) 作为有效值并且允许重复的元素。只要集合未修改,ArrayList 就可以同时支持多个阅读器。若要保证 ArrayList 的线程安全,则必须通过由 Synchronized 方法返回的包装来执行所有操作。该类实现 IList, ICollection, IEnumerable, ICloneable泛型接口。其子元素是object类型的对象。

        ArrayList类定义了对实例化对象进行操作的若干方法方法:

            1:Add()向数组中添加一个元素,
            2:Remove()删除数组中的一个元素
            3:RemoveAt(int i)删除数组中索引值为i的元素
            4:Reverse()反转数组的元素
            5:Sort()以从小到大的顺序排列数组的元素
            6:Clone()复制一个数组

        ArrayList 还同时支持多个阅读器。相应的属性和方法举例如下:

               Synchronized(?)方法:返回同步的(线程安全)列表包装。“?”表示方法参数。

               SyncRoot属性:获取可用于同步 ArrayList 访问的对象。

               IsSynchronized属性:获取一个值,该值指示是否同步对 ArrayList 的访问(线程安全)。

              ArrayList myCollection = new ArrayList();
              lock(myCollection.SyncRoot) {
              foreach (Object item in myCollection) {
                 // Insert your code here.
              }}
              // Creates and initializes a new ArrayList.
              ArrayList myAL = new ArrayList();
              myAL.Add( "The" );
              myAL.Add( "quick" );
              myAL.Add( "brown" );
              myAL.Add( "fox" );

              // Creates a synchronized wrapper around the ArrayList.
              ArrayList mySyncdAL = ArrayList.Synchronized( myAL );

              // Displays the sychronization status of both ArrayLists.
              Console.WriteLine( "mySyncdAL is {0}.", mySyncdAL.IsSynchronized ? "synchronized" : "not synchronized");


3、List泛型 类:表示可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法。 命名空间:System.Collections.Generic

      List <T> 类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现 IList泛型接口,既使用相等比较器又使用排序比较器。 List <T>接受 nullNothingnullptrnull 引用作为引用类型的有效值并且允许有重复的元素。如果对类型 T 使用值类型,则需要考虑实现和装箱问题。


        PS:简要总结如下: Array是针对 任意类型、固定长度的。
                                        List<T>是针对 特定类型、任意长度的。
                                        ArrayList是针对 任意类型、任意长度的。

4、Hashtable :表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。命名空间:

System.Collections;Dictionary:表示键和值的集合。

    多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减。单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分。Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便。对于值类型,特定类型(不包括 Object)的 Dictionary 的性能优于 Hashtable,这是因为 Hashtable 的元素属于 Object 类型,所以在存储或检索值类型时通常发生装箱和取消装箱操作。


阅读(743) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~