C# 集合

C# 集合(Collection)

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

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

各种集合类和它们的用法

动态数组(ArrayList)

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

ArrayList 类的方法和属性

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

属性描述
Capacity 获取或设置 ArrayList 可以包含的元素个数。
Count 获取 ArrayList 中实际包含的元素个数。
IsFixedSize 获取一个值,表示 ArrayList 是否具有固定大小。
IsReadOnly 获取一个值,表示 ArrayList 是否只读。
IsSynchronized 获取一个值,表示访问 ArrayList 是否同步(线程安全)。
Item[Int32] 获取或设置指定索引处的元素。
SyncRoot 获取一个对象用于同步访问 ArrayList。

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

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

 

实例

ArrayList arrayList = new ArrayList();
            arrayList.Add(1);
            arrayList.Add(1);
            arrayList.Add(4);
            arrayList.Add(5);
            arrayList.Add(1);
            arrayList.Add(4);
            Console.WriteLine($"Count:{arrayList.Count},Capacity:{arrayList.Capacity}");
            String arrayContent = "";
            foreach(int i in arrayList)
            {
                arrayContent += i;
            }
            Console.WriteLine("Content:"+arrayContent);

C# 哈希表(Hashtable)

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

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

Hashtable 类的方法和属性

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

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

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

序号方法名 & 描述
1 public virtual void Add( object key, object value );
向 Hashtable 添加一个带有指定的键和值的元素。
2 public virtual void Clear();
从 Hashtable 中移除所有的元素。
3 public virtual bool ContainsKey( object key );
判断 Hashtable 是否包含指定的键。
4 public virtual bool ContainsValue( object value );
判断 Hashtable 是否包含指定的值。
5 public virtual void Remove( object key );
从 Hashtable 中移除带有指定的键的元素。

 

实例

 //hashtable
            Hashtable table = new Hashtable();
            table.Add("key", "value");
            table.Add("nothing", "");
            table.Add("answer", "42");

            if (table.ContainsValue("114514"))
            {
                Console.WriteLine("This value is contains.");
            }
            else
            {
                Console.WriteLine("add 191810:114514 in table.");
                table.Add("1919810", "114514");
            }
            ICollection key = table.Keys;
            foreach (string k in key)
            {
                Console.WriteLine(k + ": " + table[k]);
            }

 

 

C# 排序列表(SortedList)

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

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

SortedList 类的方法和属性

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

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

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

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

 

实例

 //SortedList
            SortedList sortedList = new SortedList();
            sortedList.Add("1919810","114514");
            sortedList.Add("homo", "wa ta si");
            ICollection keys = sortedList.Keys;
            foreach (string k in keys)
            {
                Console.WriteLine(k + ": " + sortedList[k]);
            }

 

C# 堆栈(Stack)

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

Stack 类的方法和属性

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

属性描述
Count 获取 Stack 中包含的元素个数。

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

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

 

实例

//Stack
            Stack stack = new Stack();
            stack.Push("l");
            stack.Push("a");
            stack.Push("V");
            string stackContent = "";
            foreach(string i in stack)
            {
                stackContent += i;
            }
            Console.WriteLine(stackContent);
            stack.Push(" ");
            stack.Push("e");
            stack.Push("t");
            stack.Push("a");
            stack.Push("v");
            stack.Push("i");
            stack.Push("r");
            stack.Push("P");
            stackContent = "";
            foreach (string i in stack)
            {
                stackContent += i;
            }
            Console.WriteLine(stackContent);
            for(int i=0;i<8;i++)
            {
                stack.Pop();
            }
            stackContent = "";
            foreach (string i in stack)
            {
                stackContent += i;
            }
            Console.WriteLine(stackContent);

 

 

C# 队列(Queue)

 

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

Queue 类的方法和属性

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

属性描述
Count 获取 Queue 中包含的元素个数。

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

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

 

实例

//Queue
            Queue queue = new Queue();
            queue.Enqueue("Holy");
            queue.Enqueue(" ");
            queue.Enqueue("Shit");
            String queueContent = "";
            foreach(string str in queue)
            {
                queueContent += str;
            }
            Console.WriteLine(queueContent);
            queue.Dequeue();
            queue.Dequeue();
            queueContent = "";
            foreach (string str in queue)
            {
                queueContent += str;
            }
            Console.WriteLine(queueContent);

 

C# 点阵列(BitArray)

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

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

 //BitArray 判断数值位数 可以在这里调用与或非异或方法
                BitArray bitArray = new BitArray(8);
                byte[] bytes = new byte[] { 8 };
                BitArray bitArray1 = new BitArray(8);
                byte[] bytes1 = new byte[] { 11 };
                bitArray = new BitArray(bytes);
                bitArray1 = new BitArray(bytes1);
                //for 输出位数 1位true 0位false
                //8 1000, 11 1011
                string ouput1 = "";
                for (int i = bitArray.Length - 1; i > -1; i--)
                {
                    if (bitArray[i])
                    {
                        ouput1 += "1";
                    }
                    else
                    {
                        ouput1 += "0";
                    }
                }
                Console.WriteLine($"8:{ouput1}");
                string ouput2 = "";
                for (int i = bitArray1.Length - 1; i > -1; i--)
                {
                    if (bitArray1[i])
                    {
                        ouput2 += "1";
                    }
                    else
                    {
                        ouput2 += "0";
                    }
                }
                Console.WriteLine($"11:{ouput2}");
                Console.WriteLine($"8&11{bitArray.And(bitArray1)}");

 

posted @ 2020-08-25 11:54  虚青海  阅读(232)  评论(0编辑  收藏  举报