当前位置: 首页 > 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)(线性时间)。

http://www.lryc.cn/news/391147.html

相关文章:

  • rust + mingw安装教程
  • 【sqlite3】联系人管理系统
  • 秋招Java后端开发冲刺——并发篇2(JMM与锁机制)
  • 记录一次Chrome浏览器自动排序ajax请求的JSON数据问题
  • 【嵌入式——FreeRTOS】任务
  • 网关,路由器,交换机
  • sublime 3 背景和字体颜色修改
  • leetcode 403周赛 包含所有1的最小矩形面积||「暴力」
  • Stable Diffusion web UI 插件
  • 深度学习中的反向传播算法的原理
  • 身处奇瑞看三星:既“开卷“又“起火“,却更难受了
  • 系统架构设计师教程(清华第2版)<第1章 绪论>解读
  • Vue + Element UI + JSEncrypt实现简单登录页面
  • 从“关注流”到“时间线”,搜狐给内容加信任价值
  • vscode的一些使用问题
  • 爬虫-网页基础
  • 保存huggingface缓存中AI模型(从本地加载AI模型数据)
  • wps的xlsm和xltm和xlam格式的文件各有什么区别
  • 软件性能测试有哪几种测试方法?专业性能测试报告出具
  • JavaScript语言简介与实战应用:从零开始的编程之旅
  • 如何理解synchronized锁升级
  • js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some
  • Node.js开发实战 视频教程 下载
  • VS2022(Visual Studio 2022)最新安装教程
  • 从华为和特斯拉之争,看智能驾驶的未来
  • 20240705 每日AI必读资讯
  • C++ 设计模式之访问者模式
  • linux——IPC 进程间通信
  • JAVA数字化产科管理平台源码:涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全流程的信息化管理
  • http数据传输确保完整性和保密性整流程方案(含源码)