当前位置: 首页 > news >正文

C#中的容器

1、数组

        数组是存储相同类型元素的固定大小的顺序集合

        声明数组时,必须指定数组的大小 2.数组的插入和删除数据比较麻烦,但是查询比较快

2、动态数组(ArrayList)

动态数组:可自动调节数组的大小 

可以存储任意类型数据,但是会带来装箱与拆箱的操作。

那什么是装箱和拆箱呢?

装箱与拆箱
装箱与拆箱
将所有的数据的都作为了object去处理
装箱:从值类型转换到引用类型
拆箱:从引用类型转换到值类型
一定只有经过装箱的对象才会有拆箱

装箱与拆箱的原理
装箱的原理:
1.分配堆区内存(值类型数据大小+指针大小)
2.将值类型数据拷贝到分配的堆区内存中
3.将堆区的内存地址返回
拆箱的原理:
1.获取堆区中的属于值类型的地址
2.将堆区中的值类型数据拷贝到栈区中的值类型实例中

性能损耗
1.装箱时,需要分配内存,创建新的对象
2.拆箱时,需要释放内存

3、动态数组(List)

List在C#中不再是链表而是动态数组,List是泛型

声明时指定了数据类型,避免了装箱与拆箱,能够自动扩容

4、双向链表(LinkedList)

        双向链表,插入和删除数据比较快,但是查询比较慢

5栈与队列
        栈与队列的特点:                                                                                                                                栈:先进后出
        队列:先进先出

6、哈希表与字典
        哈希表与字典的存在形式:
        哈希表:键值对形式存储
        哈希冲突:不同的键值对在哈希表计算中得到的相同的哈希值
        1.链地址法
        2.开放寻址法
        字典:键值对形式存储

        哈希表与字典的异同:
        字典与哈希表区别:
        相同点:
        1.都是键值对形式存在,且键是唯一的,值是不唯一的,都是无序的键值对
        2.存储的数据个数不受限制
        3.方法高度相似
        不同点:
        1.键值对的类型不一样,哈希表是任意类型,字典是指定类型
        2.命名空间不一样 哈希表System.Collections,字典System.Collections.Generic
        3.限制类型不同,字典存储数据时限制类型,哈希表是存储任意类型
        4.性能不同,哈希表存在装箱与拆箱,字典不存在装箱与拆箱

7、HashSet<T> 集合

C#的hash集,是泛型,非线性结构.用于存储唯一的元素,不允许重复。它支持高效的元素查找和去重。

哈希表(Hash Table): HashSet 使用哈希表作为底层数据结构。哈希表是一种用于快速查找和插入的数据结构,它将键映射到值的过程通过哈希函数来完成。
哈希函数: 哈希函数是一个将元素映射到哈希值的函数。在 HashSet 中,哈希函数将元素转换为一个索引,以便快速定位元素。好的哈希函数能够尽可能避免冲突,即不同的元素映射到相同的索引。
桶(Buckets): 哈希表通常由一组桶组成,每个桶存储一组哈希值相同(或相近)的元素。HashSet 中的每个桶可以包含一个或多个元素。
碰撞解决: 由于不同的元素可能映射到相同的哈希值,可能会导致冲突。哈希表使用不同的碰撞解决策略来处理这些冲突,常见的有链地址法(Chaining)和开放寻址法(Open Addressing)等。
动态大小: HashSet 的哈希表在内部会动态地调整大小,以适应添加的元素数量。当哈希表的负载因子(即元素数量与桶数量的比例)超过阈值时,会自动重新调整桶的数量。
性能: 哈希表的平均查找和插入操作的时间复杂度通常是 O(1)(常数时间),但在极端情况下可能会退化为 O(n)(线性时间)。

相关文章:

  • 鸿蒙开发设备管理:【@ohos.usb (USB管理)】
  • 人工智能在医疗领域的革命性应用
  • LeetCode.68文本左右对齐
  • 无偏归一化自适应心电ECG信号降噪方法(MATLAB)
  • 2024暑假集训第四次考试(终极测试)
  • git-extras
  • 【AI-小米机器狗】Dockerfile包含SSH和SFTP
  • ASP.NET Core 6.0 使用 Action过滤器
  • 【笔记】字符串相似度代码分享
  • 重塑通信边界,基于ZYNQ7000 FPGA驱动的多频段多协议软件无线电平台
  • 腾讯课堂即将停止服务?来试试这款开源的知识付费系统
  • strcpy,srtcmp,strlen函数漏洞利用
  • 鸿蒙OS开发者高级学习第2课:自由流转(含习题答案)
  • Linux学习笔记(一)
  • 若依 Vue 前端分离 3.8.8 版中生成的前端代码中关于下拉框只有下拉箭头的问题
  • 78. Subsets
  • happypack两次报错的问题
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • webpack+react项目初体验——记录我的webpack环境配置
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 复杂数据处理
  • 给第三方使用接口的 URL 签名实现
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 检测对象或数组
  • 数组大概知多少
  • 优秀架构师必须掌握的架构思维
  • 数据库巡检项
  • 昨天1024程序员节,我故意写了个死循环~
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #07【面试问题整理】嵌入式软件工程师
  • #pragma预处理命令
  • $.ajax()参数及用法
  • (11)MATLAB PCA+SVM 人脸识别
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (NSDate) 时间 (time )比较
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (汇总)os模块以及shutil模块对文件的操作
  • (九十四)函数和二维数组
  • (利用IDEA+Maven)定制属于自己的jar包
  • (四)stm32之通信协议
  • ***原理与防范
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Framework杂记
  • .net 简单实现MD5
  • .NET4.0并行计算技术基础(1)
  • .net开发日常笔记(持续更新)
  • .net下的富文本编辑器FCKeditor的配置方法
  • .NET中使用Protobuffer 实现序列化和反序列化
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心