.net-----集合和数据结构

news2025/7/12 7:41:46

集合和数据结构

  • 前言
  • 集合和数据结构的基本概念
    • 命名空间
  • 列表类集合
    • 列表类集合:数组列表
    • 列表类集合:列表List<T>
    • 双向链表LinkedList<T>
  • 字典类集合
    • 字典类集合类型
    • 哈希表Hashtable
    • 字典类集合:Dictionary<TKey, TValue >
    • 排序列表
    • SortedList<TKey, TValue>
    • 排序字典SortedDictionary<TKey, TValue>
  • 队列集合类型
  • 堆栈集合类型
  • 散列集合
    • 用于集合运算的方法:
    • 用于测试集合的方法:
  • 位集合
    • BitArray 类
    • BitVector32类
  • 专用集合

前言

集合和数据结构的基本概念

列表类集合

字典类集合

队列集合类型

堆栈集合类型

散列集合

位集合

集合和数据结构的基本概念

命名空间

  • System.Collections
    对象:列表/链表、位数组、哈希表、队列和堆栈

  • System.Collections.Generic
    定义泛型集合的接口和类

  • System.Collections.Specialized
    包含专用的集合

列表类集合

  • 列表类集合类型基于IList接口,集合中的每个元素都只包含一个值

  • 列表类集合类型包括:

Array
ArrayList集合类型
List集合类型

列表类集合:数组列表

ArrayList或List
用于构建复杂的数组或列表集合,始终一维
容量可根据需要自动扩充
提供添加、插入或移除某一范围元素的方法

添加、删除、查找、数据排序、拷贝和转换、元素数容量和实际数

ArrayList al = new ArrayList();

al. Add(1);
al. Insert(1,”A”);
al. Remove(3);
al. RemoveAt(2);
……

列表类集合:列表List

List
对应于 ArrayList 的泛型类
表示可通过索引访问的对象的强类型列表
该类使用大小可按需动态增加的数组实现 IList泛型接口
提供用于对列表进行搜索、排序和操作的方法

List<string> weekdays = new List<string>();
weekdays. Add("Monday"); 
……
weekdays. Insert(1, "Tuesday");

双向链表LinkedList

  • 通用链表,提供LinkedListNode类型的单独节点
  • LinkedListNode属性Previous 和Next用于访问其前后节点
  • LinkedListNode属性Value用于获取节点的值
  • 属性List用于获取节点所属的LinkedList
  • LinkedList属性First和Last表示第一个和最后一个节点
LinkedList<int> list = new LinkedList<int>(); //创建双向链表
list.AddFirst(0); list.AddLast(8);
LinkedListNode<int> lln1 = new LinkedListNode<int>(1); //创建节点
LinkedListNode<int> lln2 = new LinkedListNode<int>(2); //创建节点
list.AddFirst(lln1); list.AddLast(lln2);
list.AddBefore(list.Last, 33); list.AddAfter(list.Last, 25);
LinkedListNode<int> mark1 = list.Find(8); //查找节点
list.AddBefore(mark1, 11);
LinkedListNode<int> node = list.First; //输出列表内容

字典类集合

字典类集合类型

基于IDictionary/IDictionary<TKey, TValue > 接口
集合中的每个元素都包含键/值对

Hashtable集合类型
Dictionary 集合类型
SortedList集合类型
SortedList<TKey, TValue>集合类型
SortedDictionary<TKey, TValue> 集合类型

哈希表Hashtable

键/值(key/value)对的集合,根据键的哈希代码进行组织
key和value键值均为object类型

每个键(key)必须是唯一的
添加后键(key)就不能更改
键(key)不能为 null 引用,但值(value)可以

在这里插入图片描述

字典类集合:Dictionary<TKey, TValue >

  • TKey表示字典中的键的类型
  • TValue表示字典中的值的类型
  • 集合中的每个元素都是一个KeyValuePair<TKey, TValue>结构,由一个值及其相关联的键组成
  • 提供了从一组键到一组值的映射

在这里插入图片描述

排序列表

  • 键/值(key/value)对的集合,按键排序,可按键和索引访问

  • 集合中的每个元素都是一个可作为DictionaryEntry对象进行访问的键/值对

  • 添加和移除元素时,元素会按正确的排序顺序插入或移除,同时索引也进行相应的调整

SortedList<TKey, TValue>

  • 泛型类,表示键/值(key/value)对的集合

  • 以基于键的排序顺序维护元素,并可按照键和索引访问

  • 提供了从一组键到一组值的映射

  • 每个元素都是一个KeyValuePair<TKey, TValue>结构

元素对象查找的方法Contains、ContainsKey、ContainsValue、IndexOfKey和IndexOfValue
对象设置和获取的方法GetByIndex、GetKey、GetKeyList、GetValueList和SetByIndex

排序字典SortedDictionary<TKey, TValue>

SortedList<TKey, TValue>使用的内存较少
SortedDictionary<TKey, TValue>可对未排序的数据执行更快的插入和移除

SortedList list = new SortedList(); //创建List实例对象
list.Add(5, "Friday"); 
list.Remove(7);  //使用Remove方法删除索引7位置的元素
list.RemoveAt(5); ……

 SortedList<string, string> list = new SortedList<string, string>();
list.Add("txt", "notepad.exe"); ……

SortedDictionary<string, string> list = new SortedDictionary<string, string>();
list.Add("txt", "notepad.exe"); ……
  • 添加元素的方法——Add;
  • 删除元素的方法——Remove, Clear
  • 元素对象查找方法——Contains,ContainKey,ContainValue
  • Count属性——表中键/值对数目
  • Keys属性——键的集合
  • Values属性——值的集合

队列集合类型

  • Queue类和Queue泛型类表示对象的先进先出集合

  • 存储在Queue中的对象在一端(Queue 的结尾处)插入,从另一端(Queue的开始处)移除

在这里插入图片描述

堆栈集合类型

Stack类和Stack泛型类表示对象的简单的后进先出非泛型集合
Stack采用循环缓冲区方式实现对象的增删

在这里插入图片描述

散列集合

  • HashSet泛型类
  • set 集合,实现 ICollection 接口和 ICollection泛型接口
  • 集是一组不重复出现且无特定顺序的元素、

用于集合运算的方法:

UnionWith(并集)
IntersectWith(交集)
ExceptWith(差集)
SymmetricExceptWith(对称差集)

用于测试集合的方法:

IsProperSubsetOf、IsProperSupersetOf、IsSubsetOf、IsSupersetOf、Overlaps和SetEquals

位集合

元素为位标志的集合,其元素都是一位,而不是一个对象

BitArray 类

  • 管理位值的压缩数组,其容量可通过Length属性来控制
  • 使用一个整数索引(始于0)访问此集合中的元素
  • 设置/获取指定索引位置的值方法Set和SetAll/Get
  • 筛选运算的方法:And,Or,Xor和Not

BitVector32类

  • 值类型,在堆栈上分配;而BitArray 是引用类型,在堆上分配
  • 性能更高

专用集合

NameValueCollection、StringDictionary和 StringCollection 等特殊用途的集合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/38540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3 Pinia 全局状态管理工具的使用

Pinia 是 Vue3 官方更推荐使用的全局状态管理工具。 Pinia 最初正是为了探索 Vuex 的下一个版本而开发的&#xff0c;因此整合了核心团队关于 Vuex 5 的许多想法。最终&#xff0c;我们意识到 Pinia 已经实现了我们想要在 Vuex 5 中提供的大部分内容&#xff0c;因此决定将其作…

E-梅莉的市场经济学

E-梅莉的市场经济学 题目背景 梅莉这个学期选修了经济学。但是主修心理学的她实在不擅长经济领域的分析&#xff0c;为此她时常抱怨自己学不会&#xff0c;想退课。 但是如果现在退掉的话这学期的学分就不够啦&#xff0c;因此她根据“梦中”的经历&#xff0c;“胡诌”了一…

Unity 如何实现框选游戏战斗单位

文章目录&#x1f354; Preface✨ 如何在屏幕坐标系内绘制框选框&#x1f389; 根据框选范围定位其在世界坐标系中对应的区域&#x1f947; 在该区域内进行物理检测&#x1f354; Preface 本文简单介绍如何实现即时战略游戏中框选战斗单位的功能&#xff0c;如图所示&#xff…

NeRF-SLAM 学习笔记

NeRF-SLAM: Real-Time Dense Monocular SLAM with Neural Radiance Fields 主页&#xff1a;https://deepai.org/publication/nerf-slam-real-time-dense-monocular-slam-with-neural-radiance-fields 论文&#xff1a;https://arxiv.org/pdf/2210.13641.pdf Code&#xff1a;…

RabbitMQ复习笔记

文章目录RabbitMQ一、MQ引言1.1、什么是MQ1.2、MQ有哪些1.3、不同MQ特点二、RabbitMQ 的引言2.1、RabbitMQ2.2、RabbitMQ的安装2.2.1、下载2.2.2、下载的安装包2.2.3、安装步骤三、RabiitMQ 配置3.1、RabbitMQ 管理命令行3.2、web管理界面介绍3.2.1、overview概览3.2.2 Admin用…

手摸手利在idea中利用maven创建web项目

1. 下载maven&#xff0c;目前最新版本是3.8.6。在环境变量中创建MAVEN_HOME变量&#xff0c;并在PATH中添加。maven的运行依赖于java环境&#xff0c;这意味着在配置MAVEN前&#xff0c;应该已经在环境变量中配置有JAVA_HOME和PATH中配置好了JAVA相关环境。 2. 配置完毕后&…

力扣(LeetCode)84. 柱状图中最大的矩形 (C++)

朴素思想 朴素思想&#xff0c;找左右边界&#xff0c;依次乘以区间内最小上边界&#xff0c;取最大值。这个做法需要遍历左边界&#xff0c;对于每个左边界遍历右边界。因此需要 O(n2)O(n^2)O(n2) 的时间复杂度。 转换思路&#xff0c;确定上边界&#xff0c;找左右边界。这…

数据结构--循环链表

目录 1.为什么要有循环链表 2.定义 3.循环链表和单链表的图示对比 4.循环链表和单链表的代码对比 5.循环链表的操作 1.clist.h 2.clist.cpp 1.初始化plist 2.往plist中头部插入数字val 3.往plist中的尾部插入数字val 4.在plist中查找val值,找到返回该节点地址,失败返…

SpringAOP(2)-spring源码详解(七)

上篇文章说了spring的aop&#xff0c;在启动类加一个启动注解&#xff0c;注解点进源码可以看到注册了bean定义的后置处理器。每个切入点都会生成一个adviosr&#xff0c;他们会排序好依次注册。 他的顺序是before、after、afterRturning、afterThrowing 原创 SpringAOP&…

Mac解决鼠标滚轮反方向移动逻辑--Mos(又免费又好用哦~)

目录&#xff1a;&#x1f335;&#x1f335;&#x1f335;前言什么&#xff1f;Mac竟然需要鼠标&#xff1f;Mos &#xff0c;让你的鼠标丝般顺滑&#xff5e;❤️❤️❤️忙碌的敲代码也不要忘了浪漫鸭&#xff01;&#x1f335;&#x1f335;&#x1f335;前言 ✨你好啊&…

PHP连接外部服务器的MySQL参考教程

PHP连接AWS服务器 云服务器上安装MySQL参考教程 linux-安装MySQL&#xff1a;https://blog.csdn.net/xhmico/article/details/125197747云端服务器(linux版)部署mysql&#xff1a;https://blog.csdn.net/m0_51406695/article/details/123886966linux云服务器从零开始安装mysq…

你不能错过的【Python爬虫】测试2(完整源代码+架构+结果)

目录 一、关键工具包的环境以及版本二、架构展示三、各部分code3.1 yjs.py3.2 items.py3.3 middlewares.py3.4 pipelines.py3.5 settings.py四、结果4.1 控制台输出结果4.2 结果截图一、关键工具包的环境以及版本 scrapy:2.7.1版本(这里主要用到的工具包) 二、架构展示 三…

HyperLynx(三十二)高速串行总线仿真(四)

高速串行总线仿真&#xff08;四&#xff09; 在上节的基础上 1.通过导出到LineSim验证一个串行通道 2.快速眼图仿真 1.通过导出到LineSim验证一个串行通道 接下来&#xff0c;将导出网络到LineSim&#xff0c;并为电容分配SPICE模型。然后&#xff0c;将添加封装和串行电容…

WENO格式自动推导

简介 WENO格式是CFD中的一种高精度的数值格式。如果函数光滑&#xff0c;使用rrr个模板可以在空间上达到2r−12r-12r−1。如果出现间断&#xff0c;那么WENO格式退化为ENO格式。 理论上WENO可达任意阶精度&#xff0c;但是推导过程比较繁琐。本文使用Mathematica软件完成WENO…

一个简单的HTML网页(千与千寻电影) 大二学生网页设计与制作 电影主题网页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

C++ 多态之虚函数表

虚函数表概述 C 的多态&#xff0c;使用动态绑定的技术,技术的核心是虚函数表&#xff08;简称虚表&#xff09;&#xff0c;每个包含了虚函数的类都包含一个虚表&#xff0c;虚表是属于类的&#xff0c;而不是属于某个具体的对象&#xff0c;一个类只需要一个虚表即可。同一个…

猴子也能学会的jQuery第十期——jQuery元素操作(下)

&#x1f4da;系列文章—目录&#x1f525; 猴子也能学会的jQuery第一期——什么是jQuery 猴子也能学会的jQuery第二期——引用jQuery 猴子也能学会的jQuery第三期——使用jQuery 猴子也能学会的jQuery第四期——jQuery选择器大全 猴子也能学会的jQuery第五期——jQuery样式操作…

树莓派系统安装,使用SSD/U盘启动centos

树莓派系统安装&#xff0c;使用SSD/U盘启动centos argon m2 外壳厂家资料 https://www.waveshare.net/wiki/PI4-CASE-ARGON-ONE-M.2 TF卡安装系统 如果是使用TF卡安装&#xff0c;则参考官方文档按步骤安装即可&#xff1a; https://www.waveshare.net/wiki/Raspberry_Pi_Do…

FAlphaBlend——Unreal中的插值助手

游戏开发中经常要进行插值处理&#xff0c;这个东西处理虽然不复杂&#xff0c;但如果自己重新做&#xff0c;还是要写额外的代码&#xff0c;好消息是&#xff0c;Unreal已经为我们提供了插值助手——FAlphaBlend。 我们以一个非常简单的应用场景来说明FAlphaBlend的用处&…

matplotlib详细教学

Matplotlib初相识 认识matplotlib Matplotlib是一个Python 2D绘图库&#xff0c;能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形&#xff0c;用来绘制各种静态&#xff0c;动态&#xff0c;交互式的图表 一个最简单的绘图例子 matplotlib的图像都是画在对应…