C#集合和数据结构,随笔记录

C#集合和数据结构

  • System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表/链表、位数组、哈希表、队列和堆栈)的集合

System.Collections.Generic 命名空间:

  • 所有集合都直接或间接基于ICollection接口
  1. 列表类集合类型: 集合类型基于 IList 接口,集合中的每个元素都只包含一个值。列表类集合类型包括:Array, ArrayList, List<T>.

ArrayList或List<T>用于构建复杂的数组或列表集合。相对于Array的容量固定性,ArrayList或List<T>的容量可根据需要自动扩充。ArrayList或List<T>还提供添加、插入或移除某一范围元素的方法

  1. ArrayList列表类型的主要成员:。

用于添加元素对象的方法Add、AddRange、Insert和InsertRange

用于删除元素对象的方法Remove、RemoveAt、RemoveRange和Clear

用于元素对象查找的方法IndexOf、LastIndexOf、Contains和BinarySearch

用于数据排序的方法Sort和Reverse

用于拷贝和转换的方法Clone、CopyTo和ToArray

Capacity属性用于获取或设置可包含的元素数

Count属性用于获取实际包含的元素数

  1. **List<T>**表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索、排序和操作的方法; List<T>类是对应于 ArrayList 的泛型类。该类使用大小可按需动态增加的数组实现 IList<T>泛型接口, List<T>泛型类的主要成员:

添加元素对象的方法Add、AddRange、Insert和InsertRange

删除元素对象的方法Remove、RemoveAt、RemoveRange、RemoveAll和Clear

元素对象查找的方法BinarySearch、Contains、Exists、Find、FindAll、FindIndexFindLast、FindLastIndex、IndexOf和LastIndexOf

数据排序的方法Sort和Reverse

拷贝和转换的方法ConvertAll<TOutput>和CopyTo

Capacity属性用于获取或设置包含的元素数

Count属性用于获取实际包含的元素数

  1. 字典类集合类型

字典类集合类型基于IDictionary / IDictionary<TKey, TValue > 接口,集合中的每个元素都包含键/值对。字典类集合类型包括:

    1. Hashtable集合类型
    2. Dictionary 集合类型
    3. SortedList集合类型
    4. SortedList<TKey, TValue>集合类型
    5. SortedDictionary<TKey, TValue> 集合类型

1.1 Hashtable 哈希表

  • Hashtable表示键/值(key/value)对的集合,这些键/值对根据键的哈希代码进行组织
  • Hashtable中key和value键值均为object类型
  • Hashtable集合中每个键(key)必须是唯一的,并且添加后,键( key )就不能更改。键(key )不能为 null 引用,但值(value)可以.
  • Hashtable主要成员如下:

添加元素对象的方法Add

删除元素对象的方法Remove和Clear

元素对象查找的方法Contains、ContainsKey和ContainsValue

拷贝和转换的方法CopyTo

Count属性用于获取包含在Hashtable中的键/值对的数目

Keys属性用于获取键的集合

Values属性用于获取值的集合

  • 可以利用foreach语句和DictionaryEntry类型遍历Hashtable中每个键/值对:

1.2 字典Dictionary<tkey,Tvalue>

  • Dictionary<TKey, TValue>泛型类表示键/值(key/value)对的集合。其中,TKey表示字典中的键的类型,TValue表示字典中的值的类型
  • Dictionary<TKey, TValue>泛型类提供了从一组键到一组值的映射
  • Dictionary<TKey, TValue>集合中的每个元素都是一个KeyValuePair<TKey, TValue>结构,由一个值及其相关联的键组成
  • Dictionary<TKey, TValue>泛型类的主要成员:

添加元素对象的方法Add

删除元素对象的方法Remove、Clear

元素对象查找的方法Contains、ContainsKey和ContainsValue

Count属性获取包含在Dictionary中的键/值对的数目

Item属性获取或设置与指定的键相关联的值

Keys属性获取键的集合

Values属性获取值的集合

  • 可以利用foreach语句和KeyValuePair<TKey, TValue>类型遍历Dictionary<TKey, TValue>中每个键/值对

1.3 排序列表sortedList

  • SortedList表示键/值(key/value)对的集合
  • SortedList<TKey, TValue>是其泛型版本,TKey表示字典中的键的类型,TValue表示字典中的值的类型
  • SortedList集合中每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对
  • SortedList集合中每个键(key)必须是唯一的。键不能为 null 引用,但值可以
  • SortedList类的主要成员:

添加元素对象的方法Add

删除元素对象的方法Remove、RemoveAt和Clear

元素对象查找的方法Contains、ContainsKey、ContainsValue、IndexOfKey和ndexOfValue

对象设置和获取的方法GetByIndex、GetKey、GetKeyList、GetValueList和SetByIndex

拷贝和转换的方法CopyTo

Capacity属性用于获取或设置可包含的元素数

Count属性用于获取包含的键/值对的数目

Keys属性用于获取键的集合;Values属性用于获取值的集合

1.4 泛型排序列表SortedList<TKey, TValue>

  • SortedList<TKey, TValue>泛型类表示键/值(key/value)对的集合,以基于键的排序顺序维护元素,并可按照键和索引访问。其中,TKey表示字典中的键的类型,TValue表示字典中的值的类型
  • SortedList<TKey, TValue>泛型类提供了从一组键到一组值的映射。SortedList<TKey, TValue>集合中的每个元素都是一个KeyValuePair<TKey, TValue>结构,由一个值及其相关联的键组成。通过键可以快速检索值。SortedList<TKey, TValue>中的每个键必须是唯一的。键(key)不能为空,但值(value)可以
  • SortedList<TKey, TValue>泛型类的主要成员:

-添加元素对象的方法Add

-删除元素对象的方法Remove、RemoveAt和Clear

-元素对象查找的方法ContainsKey、ContainsValue、IndexOfKey和IndexOfValue

-Capacity属性用于获取或设置可包含的元素数

-Count属性用于获取包含的键/值对的数目

-Keys属性用于获取键的集合;Values属性用于获取值的集合

1.5 排序字典SortedDictionary<TKey, TValue>

  • SortedDictionary<TKey, TValue>泛型类表示键/值(key/value)对的集合,以基于键的排序顺序维护元素。其中,TKey表示字典中的键的类型,TValue表示字典中的值的类型
  • SortedDictionary<TKey, TValue>泛型类提供了从一组键到一组值的映射。SortedDictionary<TKey, TValue>集合中的每个元素都是一个KeyValuePair<TKey, TValue>结构,由一个值及其相关联的键组成。通过键可以快速检索值。SortedDictionary <TKey, TValue>中的每个键必须是唯一的。键(key)不能为空,但值(value)可以
  • SortedDictionary<TKey, TValue>泛型类的主要成员:

-添加元素对象的方法Add

-删除元素对象的方法Remove和Clear

-元素对象查找的方法ContainsKey和ContainsValue

-Count属性用于获取包含的键/值对的数目

-Keys属性用于获取键的集合;Values属性用于获取值的集合

  1. 6队列集合类型Queue 类和Queue<T> 泛型类
  • Queue类和Queue<T>泛型类表示对象的先进先出(FIFO,First In First Out)集合
  • Queue类表示对象的先进先出(FIFO,First In First Out)集合。存储在 Queue 中的对象在一端(Queue 的结尾处)插入,从另一端(Queue的开始处)移除
  • Queue类和Queue<T>泛型类的主要成员:

-queue方法将对象添加到Queue的结尾处

-Peek方法返回位于Queue开始处的对象

-Dequeue方法移除并返回位于Queue开始处的对象

-Clear方法从Queue中移除所有对象

-Contains方法确定某元素是否在Queue中

-Count属性用于获取元素的数目

以上demo ,输出结果:10 20 30 40 ,如下图是队列操作的示意图:

1.7 HashSet<T>

//HashSet<T>泛型类是set 集合, 是一组不重复出现且无特定顺序的元素,如果添加的元素集合中已经存在,则不会添加进去,也不会报错.

//用于集合运算的方法UnionWith(并集)、IntersectWith(交集)、ExceptWith(差集)和SymmetricExceptWith(对称差集)

HashSet<int> even = new HashSet<int> { 1, 2, 4, 6, 8,9,10,1 };

//添加不重复的元素,若集合内有该元素,不添加

even.Add(6);

HashSet<int> odd = new HashSet<int> { 1, 3, 5, 7, 9,10,11 };

//并集

even.UnionWith(odd);

//排序

even = even.OrderBy(i => i).ToHashSet();

//删除元素

even.Remove(6);

//按条件删除元素

even.RemoveWhere(i => i % 2 == 0);

//CopyTo,将集合复制到一个指定的数组中,了解下

int[] numbs = new int[] { 10, 20, 30,40,50,60,70,80,90,100 };

even.CopyTo(numbs,numbs.Length-even.Count);

相关推荐
编程版小新1 分钟前
C++初阶:STL详解(四)——vector迭代器失效问题
开发语言·c++·迭代器·vector·迭代器失效
c4fx21 分钟前
Delphi5利用DLL实现窗体的重用
开发语言·delphi·dll
秋夫人27 分钟前
B+树(B+TREE)索引
数据结构·算法
鸽芷咕44 分钟前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
Jhxbdks1 小时前
C语言中的一些小知识(二)
c语言·开发语言·笔记
java6666688881 小时前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存1 小时前
源码分析:LinkedList
java·开发语言
代码雕刻家1 小时前
数据结构-3.1.栈的基本概念
c语言·开发语言·数据结构
Fan_web1 小时前
JavaScript高级——闭包应用-自定义js模块
开发语言·前端·javascript·css·html
Crazy Struggle1 小时前
.NET 7+Angular 4 轻量级新零售进销存系统
.net·angular·进销存系统