C#中的集合

C#集合

一、C#集合简介

集合与数组比较类似,都用于存放一组值,但集合中提供了特定的方法能直接操作集合中的

数据,并提供了不同的集合类来实现特定的功能。

集合简单的说就是数组的升级版。他可以动态的对集合的长度(也就是集合内最大元素的个

数)进行定义和维护!

所有集合类或与集合相关的接口命名空间都是 System.Collection。

在该命名空间中提供的常用接口如下表所示:

接口名称

作用

IEnumerable

用于迭代集合中的项,该接口是一种声明式的接口

IEnumerator

用于迭代集合中的项,该接口是一种实现式的接口

ICollection

.NET 提供的标准集合接口,所有的集合类都会直接或间接地实现这个接口

IList

继承自 IEnumerable 和 ICollection 接口,用于提供集合的项列表,并允许访问、

查找集合中的项

IDictionary

继承自 IEnumerable 和 ICollection 接口,与 IList 接口提供的功能类似,但集 合

中的项是以键值对的形式存取的

IDictionaryEnumerator

用于迭代 IDictionary 接口类型的集合

针对上表中的接口有一些常用的接口实现类,如下表所示:

类名称

实现接口

特点

ArrayList

ICollection、IList、IEnumerable、ICloneable

集合中元素的个数是可变的,提供添加、删除等

方法

Queue

ICollection、IEnumerable、ICloneable

集合实现了先进先出的机制,即元素将在集合的

尾部添加、在集合的头部移除

Stack

ICollection、IEnumerable、ICloneable

集合实现了先进后出的机制,即元素将在集合的

尾部添加、在集合的尾部移除

Hashtable

IDictionary、ICollection、IEnumerable、

ICloneable 等接口

集合中的元素是以键值对的形式存放的,是

DictionaryEntry 类型的

SortedList

IDictionary、ICollection、IEnumerable、

ICloneable 等接口

与 Hashtable 集合类似,集合中的元素以键值对

的形式存放,不同的是该集合会按照 key 值自动

对集合中的元素排序

二、动态数组

C# ArrayList 类(动态数组)是一个最常用的集合类,与数组的操作方法也是最类似的。

ArrayList 代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。

但是,与数组不同的是,ArrayList 可以使用索引在指定的位置添加和移除项目,动态数组

会自动重新调整它的大小。

同时 ArrayList 也允许在列表中进行动态内存分配、增加、搜索、排序各项。

创建 ArrayList 类的对象需要使用该类的构造方法,如下表所示:

构造方法

作用

ArrayList()

创建 ArrayList 的实例,集合的容量是默认初始容量

ArrayList(ICollection c)

创建 ArrayList 的实例,该实例包含从指定实例中复制的元素,并且初始容量

与复制的元素个数相同

ArrayList(int capacity)

创建 ArrayList 的实例,并设置其初始容量

构造方法的使用:

1 ArrayList listl=new ArrayList();

2 ArrayList list2=new ArrayList(listl);

3 ArrayList list3=new ArrayList(20);

在 C# 语言中提供了集合初始化器,允许在创建集合实例时向集合中添加元素,代码如下:

1 ArrayList list4 = new ArrayList(){l,2,3,4};由于在集合中存放的值允许是任意类型,能使用 var 关键字来定义任意类型的变量。

1 foreach(var v in list4)

2 {

3 Console.WriteLine(v);

4 }

ArrayList 类中常用的属性和方法如下表所示:

属性或方法

作用

int Add(object value)

向集合中添加 object 类型的元素,返回元素在集合中的下标

void AddRange(ICollection c)

向集合中添加另一个集合 c

Capacity

属性,用于获取或设置集合中可以包含的元素个数

void Clear()

从集合中移除所有元素

bool Contains(object item)

判断集合中是否含有 item 元素,若含有该元素则返回 True, 否则返回

void CopyTo(Array array)

从目标数组 array 的第 0 个位置开始,将整个集合中的元素复制到类型兼容

的数组 array 中

void CopyTo(Array array,int arraylndex)

从目标数组 array 的指定索引 arraylndex 处,将整个集合中的元素赋值到类

型兼容的数组 array 中

void CopyTo(int index,Array array,int

arrayIndex,int count)

从目标数组 array 的指定索引 arrayindex 处,将集合中从指定索引 index 开

始的 count 个元素复制到类型兼容的数组 array 中

Count

属性,用于获取集合中实际含有的元素个数

int IndexOf(object value)

返回 value 值在集合中第一次出现的位置

int IndexOf(object value,int startIndex)

返回 value 值在集合的 startindex 位置开始第一次出现的位置

int IndexOf(object value,int startIndex,int

count)

返回 value 值在集合的 startindex 位置开始 count 个元素中第一次出现的位

int LastIndexOf(object value)

返回 value 值在集合中最后一次出现的位置

int LastIndexOf(object value,int

startIndex)

返回 value 值在集合的 startindex 位置开始最后一次出现的位置

int LastIndexOf(object value,int

startIndex,int count)

入元素 value值在集合的 startindex 位置开始 count 个元素中最后一次出现

的位置

void Insert(int index,object value)

返回 value 向集合中的指定索引 index 处插

void InsertRange(int index,ICollection c)

向集合中的指定索引 index 处插入一个集合

void Remove(object obj)

将指定兀素 obj 从集合中移除

void RemoveAt(int index)

移除集合中指定位置 index 处的元素

void RemoveRange(int index,int count)

移除集合中从指定位置 index 处的 count 个元素

void Reverse()

将集合中的元素顺序反转

void Reverse(int index,int count)

将集合中从指定位置 index 处的 count 个元素反转

void Sort()

将集合中的元素排序,默认从小到大排序

void Sort(IComparer comparer)

将集合中的元素按照比较器 comparer 的方式排序

void Sort(int index,int count,IComparer

comparer)

将集合中的元素从指定位置 index 处的 count 个元素按照比较器 comparer

的方式排序

void TrimToSize()

将集合的大小设置为集合中元素的实际个数

三、队列

Queue (队列) 是常见的数据结构之一,队列是一种先进先出的结构,即元素从队列尾部插

入,从队列的头部移除,类似于日常生活中的站队,先到先得的效果。

集合中的 Queue 类模拟了队列操作,提供了队列中常用的属性和方法。

Queue 类提供了 4 个构造方法,如下表所示:

构造方法

作用

Queue()

创建 Queue 的实例,集合的容量是默认初始容量 32 个元素,使用默认的增长因子

Queue(ICollection col)

创建 Queue 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素

个数、增长因子相同

Queue(int capacity)

创建 Queue 的实例,并设置其指定的元素个数,默认增长因子

Queue(int capacity, float

growFactor)

创建 Queue 的实例,并设置其指定的元素个数和增长因子

增长因子是指当需要扩大容量时,以当前的容量(capacity)值乘以增长因子

(growFactor)的值来自动增加容量。

Queue类中常用的属性和方法如下表所示:

属性或方法

作用

Count

属性,获取 Queue 实例中包含的元素个数

void Clear()

清除 Queue 实例中的元素

bool Contains(object obj)

判断 Queue 实例中是否含有 obj 元素

void CopyTo(Array array, int index)

将 array 数组从指定索引处的元素开始复制到 Queue 实例中

object Dequeue()

移除并返回位于 Queue 实例开始处的对象

void Enqueue(object obj)

将对象添加到 Queue 实例的结尾处

object Peek()

返回位于 Queue 实例开始处的对象但不将其移除

object[] ToArray()

将 Queue 实例中的元素复制到新数组

void TrimToSize()

将容量设置为 Queue 实例中元素的实际数目

IEnumerator GetEnumerator()

返回循环访问 Queue 实例的枚举数

举例如下:

 class Program

{

 static void Main(string[] args)

 {

 //模拟排队购电影票的操作。

 Queue queue = new Queue();

 //向队列中加入3为购票人

 queue.Enqueue("小张");

 queue.Enqueue("小李");

 queue.Enqueue("小刘");

 Console.WriteLine("购票开始:");

 //当队列中没有人时购票结束

 while (queue.Count != 0)

 {

 Console.WriteLine(queue.Dequeue() + "已购票!");

 }

 Console.WriteLine("购票结束!");

 }

 }

四、堆栈

Stack (栈)是常见的数据结构之一,栈是一种先进后出的结构,即元素从栈的尾部插入,从

栈的尾部移除,类似于日常生活中搬家的时候装车,先装上车的东西要后拿下来。

集合中的 Stack 类模拟了栈操作,提供了栈中常用的属性和方法。

Stack 类提供了 3 种构造方法,如下表所示:

构造方法

作用

Stack()

使用初始容量创建 Stack 的对象

Stack(ICollection col)

创建 Stack 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素

个数、增长因子相同

Stack(int capacity)

创建 Stack 的实例,并设置其初始容量

Stack 类中的常用属性和方法如下表所示:

属性或方法

作用

Push(object obj)

向栈中添加元素,也称入栈

object Peek()

用于获取栈顶元素的值,但不移除栈顶元素的值

object Pop()

用于移除栈顶元素的值,并移除栈顶元素

Clear()

从 Stack 中移除所有的元素

Contains(object obj)

判断某个元素是否在 Stack 中

object[] ToArray()

复制 Stack 到一个新的数组中

举例如下:

 class Program

 {

 static void Main(string[] args)

 {

//模拟快递的存取。

 Stack stack = new Stack();7 //向栈中存放元素

 stack.Push("1 号快递");

 stack.Push("2 号快递");

 stack.Push("3 号快递");

 stack.Push("4 号快递");

 stack.Push("5 号快递");

 Console.WriteLine("取出快递:");

 //判断栈中是否有元素

 while(stack.Count != 0)

 {

 //取出栈中的元素

 Console.WriteLine(stack.Pop());

 }

 }

 }

五、哈希表(散列表)

Hashtable 类实现了 IDictionary 接口,集合中的值都是以键值对的形式存取的。元素顺序

根据key的hash值进行排列。

C# 中的 Hashtable 称为哈希表,也称为散列表,在该集合中使用键值对(key/value)的

形式存放值。

此外,还提供了根据集合中元素的 key 值查找其对应的 value 值的方法。

Hashtable 类提供的构造方法有很多,最常用的是不含参数的构造方法,即通过如下代码

来实例化 Hashtable 类。

1 Hashtable 对象名 = new Hashtable ();

Hashtable 类中常用的属性和方法如下表所示:

属性或方法

作用

Count

集合中存放的元素的实际个数

void Add(object key,object value)

 向集合中添加元素

void Remove(object key)

根据指定的 key 值移除对应的集合元素

void Clear()

清空集合

ContainsKey (object key)

判断集合中是否包含指定 key 值的元素

ContainsValue(object value)

判断集合中是否包含指定 value 值的元素

举例如下:

1 class Program

2 {

3 static void Main(string[] args)

4 {

5 Hashtable ht = new Hashtable();

6 ht.Add(1, "计算机基础");

7 ht.Add(2, "C#高级编程");

8 ht.Add(3, "数据库应用");

9 Console.WriteLine("请输入图书编号");

10 int id = int.Parse(Console.ReadLine());

11 bool flag = ht.ContainsKey(id);

12 if (flag)

13 {

14 Console.WriteLine("您查找的图书名称为:{0}", ht[id].ToString());

15 }

16 else

17 {

18 Console.WriteLine("您查找的图书编号不存在!");

19 }

20 Console.WriteLine("所有的图书信息如下:");

21 foreach(DictionaryEntry d in ht)

22 {

23 int key = (int)d.Key;

24 string value = d.Value.ToString();

25 Console.WriteLine("图书编号:{0},图书名称:{1}", key, value);

26 }

27 }

28 }

六、有序列表

SortedList 类实现了 IDictionary 接口 ,集合中的值都是以键值对的形式存取的。C# SortedList 称为有序列表,按照 key 值对集合中的元素排序。

SortedList 类中常用的属性和方法如下表所示:

属性或方法

作用

Count

集合中存放的元素的实际个数

void Add(object key,object value)

向集合中添加元素

void Remove(object key)

根据指定的 key 值移除对应的集合元素

void Clear()

清空集合

ContainsKey (object key)

判断集合中是否包含指定 key 值的元素

ContainsValue(object value)

判断集合中是否包含指定 value 值的元素

你可能感兴趣的:(c#,开发语言,后端)