C#.NET 集合对象(System.Collections)

   1. System.Array 和 System.Collecions.ArrayList

      前者是所有数组的抽象基类,每实例化一个数组,就是创建了一个Array类型的实例;后者是可以创建一个大小可变的数组。两者可以使用 BinarySearch进行查询,但必须先进行排序(排序必须实现IComparable或IComparer接口,IComparable提供排序的默认方式;而IComparer为排序提供了其他方式的选择,默认实现为Comparer,区分大小写,而 CaseInsensitiveComparer类是 IComparer 接口的实现,该接口执行不区分大小写的字符串比较。)。

      区别:
          * Array大小是固定的,而ArrayList大小是可变。
          * Array 存储的对象类型必须是相同的,而ArrayList可以存储不同类型的对象。
          * 在CLR托管堆上,Array存储的对象必须是连续存储的,而可以不是。
          * 两者都继承了IList接口,但由于Array不支持Add,Insert,Remove,RemoeAt方法,所以 Array不能随意的添加、插入、移除对象。
          * ArrayList可以使用TrimToResize()方法来压缩内存,实现最小化集合的内存开销。
   2. System.Collections.HashTable
      通过键/值堆来对数据进行存储,键不能为空,可以按键进行访问;继承了IDictionary接口。
      HashTable遍历:
          * DictionaryEntry
            例:
            Hashtable ht = new Hashtable();
            foreach (DictionaryEntry item in ht)
            {
                   Console.WriteLine(item.Key.ToString()+"-"+item.Value.ToString());
            }
          * IDictionaryEnumerator
            例:
            IDictionaryEnumerator enumertor = ht.GetEnumerator();
            while (enumertor.MoveNext())
            {
                   Console.WriteLine(enumertor.Key.ToString()+"-"+enumertor.Value.ToString());
            }
   3. System.Collectins.SortedList(不常使用)
      用于存储键值对,可以按键排序并可按照键和索引访问。
      例:
      Hashtable ht = new Hashtable();
      ht.Add(4, "4");
      ht.Add(3, "3");
      ht.Add(2, "2");
      ht.Add(1, "1");
      SortedList sortedList = new SortedList(ht, new Comparer(CultureInfo.CurrentCulture));
      Console.WriteLine("按索引访问");
       for (int i = 0; i < sortedList.Count; i++)
       {
                Console.WriteLine(sortedList.GetKey(i).ToString() + "-" + sortedList.GetByIndex(i).ToString());
       }
       Console.WriteLine("foreach 访问");
       foreach (DictionaryEntry item in sortedList)
       {
                Console.WriteLine(item.Key.ToString() + "-" + item.Value.ToString());
       }
   4. System.Collections.Queue 和 System.Collections.Stack
      Queue 表示对象的先进先出集合。
      Stack 表示对象后进先出的集合。
   5. System.Collections.BitArray

      管理位值的压缩数组,该值表示为布尔值,其中 true 表示位是打开的 (1),false 表示位是关闭的 (0)。
      例:
      BitArray bitArray = new BitArray(new int[]{9});//初始化,int类型占32位
      foreach (bool item in bitArray)                  //循环输出bitArray值
      {
               Console.WriteLine(item.ToString());
      }
      bool flag = bitArray.Get(2);//获取位值的压缩数组的第三项的值
      Console.WriteLine(flag);
      bitArray.Set(2, !flag);//修改位值的压缩数组第三项的值
      Console.WriteLine(bitArray.Get(2));

泛型和非泛型集合对照表:
非泛型集合类 泛型集合类
ArrayList List<T>
HashTable DIctionary<T>
Queue Queue<T>
Stack Stack<T>
SortedList SortedList<T>

你可能感兴趣的:(C++,c,.net,C#)