C# 集合

数组是一种指定长度和数据类型的对象,在实际应用中有局限性
集合正是为这种局限性而生的,集合的长度能根据需要更改,也允许存放任何数据类型的值

集合简介

集合和数组比较类似,都用于存放一组值,但集合中提供了特定的方法直接操作集合中的数据,并提供了不同的集合来实现特定的功能。

所有集合类或与集合相关的接口命名空间都是 System.Collection,在该命名空间中提供的常用接口如下表所示。

接口名称作用
IEnumerable用于迭代集合中的项,该接口是一种声明式的接口
IEnumerator用于迭代集合中的项,该接口是一种实现式的接口
ICollection.NET 提供的标准集合接口,所有的集合类都会直接或间接地实现这个接口
IList继承自 IEnumerable 和 ICollection 接口,用于提供集合的项列表,并允许访问、查找集合中的项
IDictionary继承自 IEnumerable 和 ICollection 接口,与 IList 接口提供的功能类似,但集 合中的项是以键值对的形式存取的
IDictionaryEnumerator用于迭代 IDictionary 接口类型的集合

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

类名称实现接口特点
ArrayListICollection、IList、IEnumerable、ICloneable集合中元素的个数是可变的,提供添加、删除等方法
QueueICollection、IEnumerable、ICloneable集合实现了先进先出的机制,即元素将在集合的尾部添加、在集合的头部移除
StackICollection、IEnumerable、ICloneable集合实现了先进后出的机制,即元素将在集合的尾部添加、在集合的尾部移除
HashtableIDictionary、ICollection、IEnumerable、 ICloneable 等接口集合中的元素是以键值对的形式存放的,是 DictionaryEntry 类型的
SortedListIDictionary、ICollection、IEnumerable、 ICloneable 等接口与 Hashtable 集合类似,集合中的元素以键值对的形式存放,不同的是该集合会按照 key 值自动对集合中的元素排序

ArrayList

动态数组,最常用的集合,与数组操作方法类似。
与数组不同的是ArrayList可以在指定索引位置添加或一处项目,动态数组会自动调整他的大小。
同样ArrayList也允许在列表中动态内存分配,添加,搜索,排序各项
创建ArrayList对象需要使用该类的构造方法:

构造方法作用
ArrayList()创建实例,集合容量为初始容量
ArrayList(ICollection c)创建 ArrayList 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数相同
ArrayList(int capacity)创建 ArrayList 的实例,并设置其初始容量

举个栗子:

ArrayList listl=new ArrayList();
ArrayList list2=new ArrayList(listl);
ArrayList list3=new ArrayList(10);

ArrayList常用方法

属性或方法作用
int Add(object value)向集合中添加 object 类型的元素,返回元素在集合中的下标
void AddRange(ICollection c)向集合中添加另一个集合 c
Capacity属性,用于设置或获取集合中可以包含的元素数量
void Clear()从集合中清除所有元素
bool Contains(Object item)判断集合中是否含有 item 元素,若含有该元素则返回 True, 否则返回 False
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实例,集合的容量默认32个元素 ,使用默认的增长因子
Queue(ICollection col)创建 Queue 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数、增长因子相同
Queue(int capacity)创建 Queue 的实例,并设置其指定的元素个数,默认增长因子
Queue(int capacity, float growFactor)创建 Queue 的实例,并设置其指定的元素个数和增长因子

注:增长因子是指当需要扩大容量时,以当前的容量(capacity)值乘以增长因子(growFactor)的值来自动增加容量。
举个栗子:

//第 1 中构造器
Queue queueq1 = new Queue();
//第 2 中构造器
Queue queueq2 = new Queue(queue1);
//第 3 中构造器
Queue queueq3 = new Queue(30);
//第 4 中构造器
Queue queueq4 = new Queue(30, 2);

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 实例的枚举数

Stack 堆栈

Stack堆栈是常用的数据结构之一,是先进后出的一种数据机构。

Stack提供的三种构造方法

构造方法作用
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 到一个新的数组中

Hashtable 哈希表(散列表)

Hashtable 类实现了 IDictionary 接口,集合中的值都是以键值对的形式存取的。
Hashtable 称为哈希表,也称为散列表,在该集合中使用键值对(key/value)的形式存放值。
Hashtable常用构造方法:
Hashtable xxx = 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 值的元素

使用 Hashtable 时能同时存放 key/value 的键值对,由于 key 值是唯一的,因此可以根据指定的 key 值查找 value 值。

SortedList类:有序列表

结构与方法与Hashtable类似:但是为有序列表,按照 key 值对集合中的元素排序
举个栗子:

  SortedList sortedList = new SortedList();
        sortedList.Add(3,"q");
        sortedList.Add(2,"q");
        sortedList.Add(1,"q");
        foreach (DictionaryEntry a in sortedList) {
            Console.WriteLine(a.Key+"" + a.Value);
        }
        sortedList.Clear();
        sortedList.Add(3, "q");
        sortedList.Add(2, "w");
        sortedList.Add(4, "e");
        foreach (DictionaryEntry a in sortedList)
        {
            Console.WriteLine(a.Key + "" + a.Value);
        }

输出:在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值