一、c# 集合基础
1 数组和集合
数组是创建和使用固定数量的强类型化对象。
集合则提供更为灵活的方式来操作对象组,可以动态的缩小和放大对象数组。
2 常见集合类型
2.1 System.Collections.Generic 类
此命名空间包含.Net平台实现的泛型集合,主要有以下几类:
类 | 说明 |
---|---|
Dictionary<TKey,TValue> | 基于键/值对的集合 |
List<T> | 按索引访问的集合 |
Queue<T> | 队列 |
SortedList<TKey,TValue> | 基于IComparer实现按键进行排序的键值对集合 |
Stack<T> | 栈 |
2.2 System.Collections.Concurrent 类
此命名空间提供线程安全操作的集合类。
类 | 说明 |
---|---|
ConcurrentDictionary<TKey,TValue> | 键值对集合的线程安全实现 |
ConcurrentQueue<T> | 队列的线程安全实现 |
ConcurrentStack<T> | 栈的线程安全实现 |
ConcurrentBag<T> | 无序集合的线程安全实现 |
BlockingCollection<T> | 为实现 IProducerConsumerCollection 的所有类型提供限制和阻止功能 |
IProducerConsumerCollection<T> | 生产者/消费者线程安全操作集合类 |
2.3 System.Collections 类
此命令空间提供非泛型集合的实现
类 | 说明 |
---|---|
ArrayList | 表示对象的数组,这些对象的大小会根据需要动态增加。 |
Hashtable | 表示根据键的哈希代码进行组织的键/值对的集合。 |
Queue | 队列 |
Stack | 栈 |
3 实现集合的几个接口
3.1 IEnumerable
该接口是所有使用c# foreach遍历时都必须实现的接口,该接口只有一个方法,就是返回一个实现IEnumerator接口的对象的GetEnumerator()方法。
public interface IEnumerable
{
IEnumerator GetEnumerator()
}
3.2 IEnumerator
该接口返回一个枚举器,枚举器是遍历集合的。
public interface IEnumerator
{
//移动到下一个元素,并返回是否可移动到下一元素
bool MoveNext();
//当前元素。
object? Current{ get; }
//重置,返回到第一个元素之前
void Reset();
}
3.3 IComparer
该接口提供比较两个对象的方法,主要用于排序。
public interface IComparer
{
//比较
int Compare(object? x,object? y);
}
3.4 IEqualityComparer
该接口用于比较对象是否相等。
public interface IEqualityComparer
{
//判断两个对象是否相等
bool Equals(object? x,object? y);
//返回对象的哈希代码
int GetHashCode(object obj);
}
3.5 ICollection
该接口定义非泛型集合的大小及同步访问。
public interface ICollection : IEnumerable
{
//拷贝数组
void CopyTo(Array array,int index);
//集合元素数量
int Count { get; }
//同步对象
object SyncRoot { get; }
//是否同步访问
bool IsSynchronized { get; }
}
3.6 IList
该接口定义按索引进行访问的非泛型集合。
public interface IList : ICollection,IEnumerable
{
//按索引访问的索引器
object? this[int index] { get;set; }
//添加元素
int Add(object? value);
//是否包含元素
bool Contains(object? value);
//清空
void Clear();
//是否只读
bool IsReadOnly { get; }
//是否固定大小
bool IsFixedSize { get; }
//查找元素索引
int IndexOf(object? value);
//插入
void Insert(int index,object? value);
//按对象值移除
void Remove(object? value);
//按索引移除
void RemoveAt(int index);
}
3.7 IDictionary
该接口定义实现键/值对(字典类)的非泛型集合。
public interface IDictionary : ICollection,IEnumerable
{
//索引器
object? this[object key] { get;set;}
//键的集合
ICollection Keys { get; }
//值的集合
ICollection Values { get; }
//是否包含
bool Contains(object key);
//添加元素
void Add(object key,object? value);
//清除
void Clear();
//是否只读
bool IsReadOnly { get; }
//是否固定大小
bool IsFixedSize { get; }
//字典枚举器
IDictionaryEnumerator GetEnumerator();
//移除元素
void Remove(object key);
}