C#集合

集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类实现了相同的接口。

集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中,Object 类是所有数据类型的基类。

动态数组

动态数组(ArrayList)代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。

ArrayList 类的方法和属性

下表列出了 ArrayList 类的一些常用的 属性:

属性说明
Capacity获取或设置 ArrayList 可以包含的元素个数。
Count获取 ArrayList 中实际包含的元素个数。
IsFixedSize获取一个值,表示 ArrayList 是否具有固定大小。
IsReadOnly获取一个值,表示 ArrayList 是否只读。
Item获取或设置指定索引处的元素。

下表列出了 ArrayList 类的一些常用的 方法:

方法名说明
public virtual int Add( object value );在 ArrayList 的末尾添加一个对象。
public virtual void AddRange( ICollection c );在 ArrayList 的末尾添加 ICollection 的元素。
public virtual void Clear();从 ArrayList 中移除所有的元素。
public virtual bool Contains( object item );判断某个元素是否在 ArrayList 中。
public virtual ArrayList GetRange( int index, int count );返回一个 ArrayList,表示源 ArrayList 中元素的子集。
public virtual int IndexOf(object);返回某个值在 ArrayList 中第一次出现的索引,索引从零开始。
public virtual void Insert( int index, object value );在 ArrayList 的指定索引处,插入一个元素。
public virtual void InsertRange( int index, ICollection c );在 ArrayList 的指定索引处,插入某个集合的元素。
public virtual void Remove( object obj );从 ArrayList 中移除第一次出现的指定对象。
public virtual void RemoveAt( int index );移除 ArrayList 的指定索引处的元素。
public virtual void RemoveRange( int index, int count );从 ArrayList 中移除某个范围的元素。
public virtual void Reverse();逆转 ArrayList 中元素的顺序。
public virtual void SetRange( int index, ICollection c );复制某个集合的元素到 ArrayList 中某个范围的元素上。
public virtual void Sort();对 ArrayList 中的元素进行排序。
public virtual void TrimToSize();设置容量为 ArrayList 中元素的实际个数。

实例:

using System;
using System.Collections;
namespace CollectionApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList al = new ArrayList();

            Console.WriteLine("Adding some numbers:");
            al.Add(45);
            al.Add(78);
            al.Add(33);
            al.Add(56);
            al.Add(12);
            al.Add(23);
            al.Add(9);
            
            Console.WriteLine("Capacity: {0} ", al.Capacity);
            Console.WriteLine("Count: {0}", al.Count);
                      
            Console.Write("Content: ");
            foreach (int i in al)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.Write("Sorted Content: ");
            al.Sort();
            foreach (int i in al)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}

运行案例

哈希表

Hashtable 类代表了一系列基于键的哈希代码组织起来的键/值对。它使用键来访问集合中的元素。

当使用键访问元素时,则使用哈希表,而且可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目。

Hashtable 类的方法和属性

下表列出了 Hashtable 类的一些常用的 属性:

属性说明
Count获取 Hashtable 中包含的键值对个数。
IsFixedSize获取一个值,表示 Hashtable 是否具有固定大小。
IsReadOnly获取一个值,表示 Hashtable 是否只读。
Item获取或设置与指定的键相关的值。
Keys获取一个 ICollection,包含 Hashtable 中的键。
Values获取一个 ICollection,包含 Hashtable 中的值。

下表列出了 Hashtable 类的一些常用的方法:

方法名说明
public virtual void Add( object key, object value );向 Hashtable 添加一个带有指定的键和值的元素。
public virtual void Clear();从 Hashtable 中移除所有的元素。
public virtual bool ContainsKey( object key );判断 Hashtable 是否包含指定的键。
public virtual bool ContainsValue( object value );判断 Hashtable 是否包含指定的值。
public virtual void Remove( object key );从 Hashtable 中移除带有指定的键的元素。

实例:

using System;
using System.Collections;
namespace CollectionsApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         Hashtable ht = new Hashtable();


         ht.Add("001", "Zara Ali");
         ht.Add("002", "Abida Rehman");
         ht.Add("003", "Joe Holzner");
         ht.Add("004", "Mausam Benazir Nur");
         ht.Add("005", "M. Amlan");
         ht.Add("006", "M. Arif");
         ht.Add("007", "Ritesh Saikia");

         if (ht.ContainsValue("Nuha Ali"))
         {
            Console.WriteLine("This student name is already in the list");
         }
         else
         {
            ht.Add("008", "Nuha Ali");
         }
         // 获取键的集合 
         ICollection key = ht.Keys;

         foreach (string k in key)
         {
            Console.WriteLine(k + ": " + ht[k]);
         }
         Console.ReadKey();
      }
   }
}

运行案例

排序列表

SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问。

排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果使用索引访问各项,则它是一个动态数组(ArrayList),如果使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。

SortedList 类的方法和属性

下表列出了 SortedList 类的一些常用的属性:

属性说明
Capacity获取或设置 SortedList 的容量。
Count获取 SortedList 中的元素个数。
IsFixedSize获取一个值,表示 SortedList 是否具有固定大小。
IsReadOnly获取一个值,表示 SortedList 是否只读。
Item获取或设置与 SortedList 中指定的键相关的值。
Keys获取 SortedList 中的键。
Values获取 SortedList 中的值。

下表列出了 SortedList 类的一些常用的方法:

方法名说明
public virtual void Add( object key, object value );向 SortedList 添加一个带有指定的键和值的元素。
public virtual void Clear();从 SortedList 中移除所有的元素。
public virtual bool ContainsKey( object key );判断 SortedList 是否包含指定的键。
public virtual bool ContainsValue( object value );判断 SortedList 是否包含指定的值。
public virtual object GetByIndex( int index );获取 SortedList 的指定索引处的值。
public virtual object GetKey( int index );获取 SortedList 的指定索引处的键。
public virtual IList GetKeyList();获取 SortedList 中的键。
public virtual IList GetValueList();获取 SortedList 中的值。
public virtual int IndexOfKey( object key );返回 SortedList 中的指定键的索引,索引从零开始。
public virtual int IndexOfValue( object value );返回 SortedList 中的指定值第一次出现的索引,索引从零开始。
public virtual void Remove( object key );从 SortedList 中移除带有指定的键的元素。
public virtual void RemoveAt( int index );移除 SortedList 的指定索引处的元素。
public virtual void TrimToSize();设置容量为 SortedList 中元素的实际个数。

实例:

using System;
using System.Collections;
namespace CollectionsApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         SortedList sl = new SortedList();

         sl.Add("001", "Zara Ali");
         sl.Add("002", "Abida Rehman");
         sl.Add("003", "Joe Holzner");
         sl.Add("004", "Mausam Benazir Nur");
         sl.Add("005", "M. Amlan");
         sl.Add("006", "M. Arif");
         sl.Add("007", "Ritesh Saikia");

         if (sl.ContainsValue("Nuha Ali"))
         {
            Console.WriteLine("This student name is already in the list");
         }
         else
         {
            sl.Add("008", "Nuha Ali");
         }

         // 获取键的集合 
         ICollection key = sl.Keys;

         foreach (string k in key)
         {
            Console.WriteLine(k + ": " + sl[k]);
         }
      }
   }
}

运行案例

堆栈

堆栈(Stack)代表了一个后进先出的对象集合。当需要对各项进行后进先出的访问时,则使用堆栈。当在列表中添加一项,称为推入元素,当从列表中移除一项时,称为弹出元素。

Stack 类的方法和属性

下表列出了 Stack 类的一些常用的属性:

属性说明
Count获取 Stack 中包含的元素个数。

下表列出了 Stack 类的一些常用的方法:

方法名
说明
public virtual void Clear();从 Stack 中移除所有的元素。
public virtual bool Contains( object obj );判断某个元素是否在 Stack 中。
public virtual object Peek();返回在 Stack 的顶部的对象,但不移除它。
public virtual object Pop();移除并返回在 Stack 的顶部的对象。
public virtual void Push( object obj );向 Stack 的顶部添加一个对象。
public virtual object[] ToArray();复制 Stack 到一个新的数组中。

实例:

using System;
using System.Collections;
namespace CollectionsApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            Stack st = new Stack();

            st.Push('A');
            st.Push('M');
            st.Push('G');
            st.Push('W');
            
            Console.WriteLine("Current stack: ");
            foreach (char c in st)
            {
                Console.Write(c + " ");
            }
            Console.WriteLine();
            
            st.Push('V');
            st.Push('H');
            Console.WriteLine("The next poppable value in stack: {0}", 
            st.Peek());
            Console.WriteLine("Current stack: ");           
            foreach (char c in st)
            {
               Console.Write(c + " ");
            }
            Console.WriteLine();

            Console.WriteLine("Removing values ");
            st.Pop();
            st.Pop();
            st.Pop();
            
            Console.WriteLine("Current stack: ");
            foreach (char c in st)
            {
               Console.Write(c + " "); 
            }
        }
    }
}

运行案例

队列

队列(Queue)代表了一个先进先出的对象集合。当需要对各项进行先进先出的访问时,则使用队列。当在列表中添加一项,称为入队,当从列表中移除一项时,称为出队。

Queue 类的方法和属性

下表列出了 Queue 类的一些常用的 属性:

属性说明
Count获取 Queue 中包含的元素个数。

下表列出了 Queue 类的一些常用的方法:

方法名说明
public virtual void Clear();从 Queue 中移除所有的元素。
public virtual bool Contains( object obj );判断某个元素是否在 Queue 中。
public virtual object Dequeue();移除并返回在 Queue 的开头的对象。
public virtual void Enqueue( object obj );向 Queue 的末尾添加一个对象。
public virtual object[] ToArray();复制 Queue 到一个新的数组中。
public virtual void TrimToSize();设置容量为 Queue 中元素的实际个数。

实例:

using System;
using System.Collections;
namespace CollectionsApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         Queue q = new Queue();

         q.Enqueue('A');
         q.Enqueue('M');
         q.Enqueue('G');
         q.Enqueue('W');
         
         Console.WriteLine("Current queue: ");
         foreach (char c in q)
            Console.Write(c + " ");
         Console.WriteLine();
         q.Enqueue('V');
         q.Enqueue('H');
         Console.WriteLine("Current queue: ");         
         foreach (char c in q)
            Console.Write(c + " ");
         Console.WriteLine();
         Console.WriteLine("Removing some values ");
         char ch = (char)q.Dequeue();
         Console.WriteLine("The removed value: {0}", ch);
         ch = (char)q.Dequeue();
         Console.WriteLine("The removed value: {0}", ch);
         Console.ReadKey();
      }
   }
}

运行案例

点阵列

BitArray 类管理一个紧凑型的位值数组,它使用布尔值来表示,其中 true 表示位是开启的(1),false 表示位是关闭的(0)。

当需要存储位,但是事先不知道位数时,则使用点阵列。可以使用整型索引从点阵列集合中访问各项,索引从零开始。

BitArray 类的方法和属性

下表列出了 BitArray 类的一些常用的属性:

属性说明
Count获取 BitArray 中包含的元素个数。
IsReadOnly获取一个值,表示 BitArray 是否只读。
Item获取或设置 BitArray 中指定位置的位的值。
Length获取或设置 BitArray 中的元素个数。

下表列出了 BitArray 类的一些常用的 方法:

方法名说明
public BitArray And( BitArray value );对当前的 BitArray 中的元素和指定的 BitArray 中的相对应的元素执行按位与操作。
public bool Get( int index );获取 BitArray 中指定位置的位的值。
public BitArray Not();把当前的 BitArray 中的位值反转,以便设置为 true 的元素变为 false,设置为 false 的元素变为 true。
public BitArray Or( BitArray value );对当前的 BitArray 中的元素和指定的 BitArray 中的相对应的元素执行按位或操作。
public void Set( int index, bool value );把 BitArray 中指定位置的位设置为指定的值。
public void SetAll( bool value );把 BitArray 中的所有位设置为指定的值。
public BitArray Xor( BitArray value );对当前的 BitArray 中的元素和指定的 BitArray 中的相对应的元素执行按位异或操作。

实例:

using System;
using System.Collections;
namespace CollectionsApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建两个大小为 8 的点阵列
            BitArray ba1 = new BitArray(8);
            BitArray ba2 = new BitArray(8);
            byte[] a = { 60 };
            byte[] b = { 13 };
            
            // 把值 60 和 13 存储到点阵列中
            ba1 = new BitArray(a);
            ba2 = new BitArray(b);

            // ba1 的内容
            Console.WriteLine("Bit array ba1: 60");
            for (int i = 0; i < ba1.Count; i++)
            {
                Console.Write("{0, -6} ", ba1[i]);
            }
            Console.WriteLine();
            
            // ba2 的内容
            Console.WriteLine("Bit array ba2: 13");
            for (int i = 0; i < ba2.Count; i++)
            {
                Console.Write("{0, -6} ", ba2[i]);
            }
            Console.WriteLine();
           
            
            BitArray ba3 = new BitArray(8);
            ba3 = ba1.And(ba2);

            // ba3 的内容
            Console.WriteLine("Bit array ba3 after AND operation: 12");
            for (int i = 0; i < ba3.Count; i++)
            {
                Console.Write("{0, -6} ", ba3[i]);
            }
            Console.WriteLine();

            ba3 = ba1.Or(ba2);
            // ba3 的内容
            Console.WriteLine("Bit array ba3 after OR operation: 61");
            for (int i = 0; i < ba3.Count; i++)
            {
                Console.Write("{0, -6} ", ba3[i]);
            }
            Console.WriteLine();
            
            Console.ReadKey();
        }
    }
}

运行案例

本内容均来自互联网,仅供参考,如有侵权请及时通知本站予以删除。邮箱:wiki#imooc.com (#改成@)

意见反馈 帮助中心 APP下载
官方微信