C#梳理【集合Collection】
C# 集合(Collection)
集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类实现了相同的接口。
集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中,Object 类是所有数据类型的基类。
集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类实现了相同的接口。
集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中,Object 类是所有数据类型的基类。
各种集合类和它们的用法
下面是各种常用的 System.Collection 命名空间的类。
类
描述和用法
动态数组(ArrayList)
它代表了可被单独索引的对象的有序集合。
它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。
哈希表(Hashtable)
它使用键来访问集合中的元素。
当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目。
排序列表(SortedList)
它可以使用键和索引来访问列表中的项。
排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。
堆栈(Stack)
它代表了一个后进先出的对象集合。
当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。
队列(Queue)
它代表了一个先进先出的对象集合。
当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。
点阵列(BitArray)
它代表了一个使用值 1 和 0 来表示的二进制数组。
当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。
作为集合的补充,更多的原理和细节请参考文章:C#常用数据结构的区别 。
下面是各种常用的 System.Collection 命名空间的类。
类 | 描述和用法 |
---|---|
动态数组(ArrayList) | 它代表了可被单独索引的对象的有序集合。
它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。 |
哈希表(Hashtable) | 它使用键来访问集合中的元素。
当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目。 |
排序列表(SortedList) | 它可以使用键和索引来访问列表中的项。
排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。 |
堆栈(Stack) | 它代表了一个后进先出的对象集合。
当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。 |
队列(Queue) | 它代表了一个先进先出的对象集合。
当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。 |
点阵列(BitArray) | 它代表了一个使用值 1 和 0 来表示的二进制数组。
当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。 |
作为集合的补充,更多的原理和细节请参考文章:C#常用数据结构的区别 。
C#动态数组(ArrayList)
动态数组(ArrayList)代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。
ArrayList 类的方法和属性
下表列出了 ArrayList 类的一些常用的 属性:
属性
描述
Capacity
获取或设置 ArrayList 可以包含的元素个数。
Count
获取 ArrayList 中实际包含的元素个数。
IsFixedSize
获取一个值,表示 ArrayList 是否具有固定大小。
IsReadOnly
获取一个值,表示 ArrayList 是否只读。
Item
获取或设置指定索引处的元素。
下表列出了 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 类的一些常用的 属性:
属性 | 描述 |
---|---|
Capacity | 获取或设置 ArrayList 可以包含的元素个数。 |
Count | 获取 ArrayList 中实际包含的元素个数。 |
IsFixedSize | 获取一个值,表示 ArrayList 是否具有固定大小。 |
IsReadOnly | 获取一个值,表示 ArrayList 是否只读。 |
Item | 获取或设置指定索引处的元素。 |
下表列出了 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)的概念:
-
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();
-
}
-
}
-
}
当上面的代码被编译和执行时,它会产生下列结果:
-
Adding some numbers:
-
Capacity: 8
-
Count: 7
-
Content: 45 78 33 56 12 23 9
-
Content: 9 12 23 33 45 56 78
下面的实例演示了动态数组(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();
-
}
-
}
-
}
当上面的代码被编译和执行时,它会产生下列结果:
-
Adding some numbers:
-
Capacity: 8
-
Count: 7
-
Content: 45 78 33 56 12 23 9
-
Content: 9 12 23 33 45 56 78
C# 哈希表(Hashtable)
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 类的一些常用的 属性:
属性 | 描述 |
---|---|
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)的概念:
-
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();
-
}
-
}
-
}
当上面的代码被编译和执行时,它会产生下列结果:
-
001: Zara Ali
-
002: Abida Rehman
-
003: Joe Holzner
-
004: Mausam Benazir Nur
-
005: M. Amlan
-
006: M. Arif
-
007: Ritesh Saikia
-
008: Nuha Ali
下面的实例演示了哈希表(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();
-
}
-
}
-
}
当上面的代码被编译和执行时,它会产生下列结果:
-
001: Zara Ali
-
002: Abida Rehman
-
003: Joe Holzner
-
004: Mausam Benazir Nur
-
005: M. Amlan
-
006: M. Arif
-
007: Ritesh Saikia
-
008: Nuha Ali
C#排序列表(SortedList)
SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问。
排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。
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 类的一些常用的 属性:
属性 | 描述 |
---|---|
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)的概念:
-
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]);
-
}
-
}
-
}
-
}
当上面的代码被编译和执行时,它会产生下列结果:
-
001: Zara Ali
-
002: Abida Rehman
-
003: Joe Holzner
-
004: Mausam Banazir Nur
-
005: M. Amlan
-
006: M. Arif
-
007: Ritesh Saikia
-
008: Nuha Ali
下面的实例演示了排序列表(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]);
-
}
-
}
-
}
-
}
当上面的代码被编译和执行时,它会产生下列结果:
-
001: Zara Ali
-
002: Abida Rehman
-
003: Joe Holzner
-
004: Mausam Banazir Nur
-
005: M. Amlan
-
006: M. Arif
-
007: Ritesh Saikia
-
008: Nuha Ali
C#堆栈(Stack)
堆栈(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 类的一些常用的 属性:
属性 | 描述 |
---|---|
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)的使用:
-
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 + " ");
-
}
-
}
-
}
-
}
当上面的代码被编译和执行时,它会产生下列结果:
-
Current stack:
-
W G M A
-
The next poppable value in stack: H
-
Current stack:
-
H V W G M A
-
Removing values
-
Current stack:
-
G M A
下面的实例演示了堆栈(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 + " ");
-
}
-
}
-
}
-
}
当上面的代码被编译和执行时,它会产生下列结果:
-
Current stack:
-
W G M A
-
The next poppable value in stack: H
-
Current stack:
-
H V W G M A
-
Removing values
-
Current stack:
-
G M A
C#队列(Queue)
队列(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 类的一些常用的 属性:
属性 | 描述 |
---|---|
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)的使用:
-
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();
-
}
-
}
-
}
当上面的代码被编译和执行时,它会产生下列结果:
-
Current queue:
-
A M G W
-
Current queue:
-
A M G W V H
-
Removing values
-
The removed value: A
-
The removed value: M
下面的实例演示了队列(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();
-
}
-
}
-
}
当上面的代码被编译和执行时,它会产生下列结果:
-
Current queue:
-
A M G W
-
Current queue:
-
A M G W V H
-
Removing values
-
The removed value: A
-
The removed value: M
C#点阵列(BitArray)
参考文章:C#梳理【BitArray(点阵列)】
C#梳理【集合Collection】的更多相关文章
- Guava库介绍之集合(Collection)相关的API
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...
- 【再探backbone 02】集合-Collection
前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...
- 5、数组和集合--Collection、Map
一.数组:同一个类型数据的集合,其实他也是一个容器 1.数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些数据 2.数组的定义: 在Java中常见: 格式1: 类型 [] 数组名 = ne ...
- WCF分布式开发步步为赢(8):使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据
数据集(DataSet).数据表(DataTable).集合(Collection)概念是.NET FrameWork里提供数据类型,在应用程序编程过程中会经常使用其来作为数据的载体,属于ADO.NE ...
- 在含有null值的复杂类的集合(Collection)中取最大值
在日常编程中,经常遇到要在一组复杂类的集合(Collection)中做比较.取最大值或最小值. 举个最简单的例子,我们要在一个如下结构的集合中选取包含最大值的元素: public class Clas ...
- 集合Collection总览
前言 声明,本文使用的是JDK1.8 从今天开始正式去学习Java基础中最重要的东西--->集合 无论在开发中,在面试中这个知识点都是非常非常重要的,因此,我在此花费的时间也是很多,得参阅挺多的 ...
- java中集合Collection转list对象
参考:java中集合Collection转list对象 首先我的需求是获取到购物车列表,购物车列表是一个Map对象,构造方法获取购物项,这里购物项是Collection对象 // 购物项集合,K商品I ...
- java基础27 单例集合Collection及其常用方法
1.集合 集合是存储对象数据的集合容器 1.1.集合比数组的优势 1.集合可以存储任意类型的数据,数组只能存储同一种数据类型的数据 2.集合的长度是变化的,数组的长度是固定的 1.2.数组:存储 ...
- 18_java之集合Collection
01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public static void main(String[] args) { ArrayList< ...
- 集合--Collection接口详解&&迭代器
/* * 集合的顶层接口--Collection接口 * 添加 * add() * addAll() * * 遍历集合 * iterator() 迭代器 * * 删除 * remove() * rem ...
随机推荐
- Scss - 简单笔记
原文链接:scss 教程 手头上疯狂在用 scss,虽然可以在里面写原生的 css, 但是为了保持风格的一致性,还是滚去看了看 scss 文档. 一.变量 变量的引入是 scss 的一个核心特性,变量 ...
- 学习 Spring (十) 注解之 @Bean, @ImportResource, @Value
Spring入门篇 学习笔记 @Bean @Bean 标识一个用于配置和初始化一个由 Spring IoC 容器管理的新对象的方法,类似于 XML 配置文件的 可以在 Spring 的 @Config ...
- 学习 Spring (一) Spring 介绍
Spring入门篇 学习笔记 Spring 是什么 Spring 是一个轻量级的 IoC (控制反转)和 AOP (面向切面)的容器框架 框架与类库的区别 框架一般是封装了逻辑.高内聚的,类库则是松散 ...
- iOS一些高效代码
一. [Bugly startWithAppId:BUGLY_APP_ID #if DEBUG developmentDevice:YES #endif config:config]; 二.
- CentOS 部署.net core 2.0 项目
上传项目到服务器 安装Nginx(反向代理服务器),配置文件 https://www.cnblogs.com/xiaonangua/p/9176137.html 安装supervisor https: ...
- luogu P1077 摆花
这道题看似好难,但是其实很简单 先把题目中所让你设的变量都设好,该输入的都输入 你会发现这道题好像成功了一半,为什么呢??? 因为设完后你会发现你不需要再添加任何变量,已经足够了. 可能最难的地方,就 ...
- SQL 对等发布
发布类型: 快照发布:发布服务器按预定的时间间隔向订阅服务器发送已发布数据的快照.事务发布:在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器.对等发布:对等发布支持多主复制 ...
- Appium+python+html生成饼图测试报告
历时三周这个小框架终于正式运行了,git源码地址;https://github.com/jiyanjiao/AutoTEST/tree/master/qingqi_driver_app 报告如图:
- 【CF1139D】Steps to One(动态规划)
[CF1139D]Steps to One(动态规划) 题面 CF 你有一个数组,每次随机加入一个\([1,n]\)的数,当所有数\(gcd\)为\(1\)时停止,求数组长度的期望. 题解 设\(f[ ...
- 【BZOJ3601】一个人的数论(数论)
[BZOJ3601]一个人的数论(数论) 题面 BZOJ 怎么这图片这么大啊... 题解 要求的是\(\displaystyle \sum_{i=1}^n [gcd(i,n)=1]i^d\) 然后把\ ...