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

C#中的集合

集合的使用

集合与数组比较类似,都用于存放 一组值

数组的优劣

数组的优势

数组在内存中是连续存储的,所以它的索引速度非常的快,而且赋值与修改元素也很简单

数组的劣势

1.在数组两个数据间插入数据很麻烦

2.在声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存的浪费 ,数组的长度过短,会造成数据溢出的错误

ArrayList(链表)的使用

介绍

是一个动态数组,可以存储任何类型的元素,因此它本身不需要指定泛型。ArrayList 是非泛型的集合,这意味着它可以存储任何类型的对象,包括 null 值。

ArrayList基本方法

  1. Add(T item): 向 ArrayList 的末尾添加一个元素。

  2. AddRange(IEnumerable collection): 将一个 IEnumerable 的元素添加到 ArrayList 的末尾。

  3. BinarySearch(int index, int count, object value, IComparer comparer): 在 ArrayList 的一个子数组中搜索一个元素,并返回该元素的索引。

  4. Clear(): 移除 ArrayList 中的所有元素。

  5. Clone(): 创建 ArrayList 的浅拷贝。

  6. Contains(object item): 确定 ArrayList 是否包含特定的元素。

  7. CopyTo(Array array): 将 ArrayList 的元素复制到一个新的数组中。

  8. CopyTo(Array array, int index): 从指定的索引开始,将 ArrayList 的元素复制到另一个数组中。

  9. GetEnumerator(): 返回一个 IEnumerator,用于遍历 ArrayList

  10. IndexOf(object value): 返回 ArrayList 中特定元素的第一个索引。

  11. IndexOf(object value, int startIndex): 从指定的起始索引开始,返回 ArrayList 中特定元素的第一个索引。

  12. Insert(int index, object item): 在 ArrayList 的指定位置插入一个元素。

  13. Remove(object obj): 移除 ArrayList 中的第一个特定元素。

  14. RemoveAt(int index): 移除 ArrayList 中指定索引处的元素。

  15. RemoveRange(int index, int count): 移除 ArrayList 中从指定索引开始的一系列元素。

  16. Reverse(): 反转 ArrayList 中元素的顺序。

  17. Sort(): 按升序对 ArrayList 中的元素进行排序。

  18. Sort(IComparer comparer): 使用指定的比较器对 ArrayList 中的元素进行排序。

  19. ToArray(): 将 ArrayList 转换为数组。

  20. TrimToSize(): 将 ArrayList 的容量设置为其元素数。

ArrayList的优势

  1. ArrayList的大小是按照其中存储的数据来动态扩充与收缩的

  2. 在声明ArrayList对象 时不需要指定它的长度

  3. ArrayList可以方便的进行数据的添加、插入、和移除

ArrayList的劣势

  1. ArrayList在存储数据时使用object类型进行存储

  2. ArrayList不是类型安全的,使用时很可能出现类型不匹配的错误

  3. 就算都有插入了同一类型的数据,但在使用的时候,我们也需要将他们转化为对应的原类型来处理

  4. ArrayList的存储存在装箱和拆箱操作,导致其性能低下

装箱

装箱是指将值类型转换为引用类型(通常是object类型或接口类型)的过程。这个过程是自动进行的,不需要显式地编写代码。当需要将值类型传递给一个期望引用类型参数的方法时,就会发生装箱。例如:

int myInt = 10;
object obj = myInt; // 这里发生了装箱
拆箱

拆箱是装箱的逆过程,即将引用类型转换回值类型。与装箱不同,拆箱需要显式的类型转换。例如:

object obj = 10; // 假设这里发生了装箱
int myInt = (int)obj; // 这里发生了拆箱

在这个例子中,obj是一个引用类型object,它包含了之前装箱的整数值。当使用(int)显式地将obj转换回int类型时,发生了拆箱。

List

  1. List集合与ArrayList由于继承了相同的接口,故使用ArrayList相似

  2. 在声明中List集合时,需要同时为其声明List集合内的数据 对象类型即泛型

List的基本方法

  1. Add(T item): 向列表末尾添加一个元素。

  2. AddRange(IEnumerable<T> collection): 将一系列元素添加到列表末尾。

  3. Clear(): 移除列表中的所有元素。

  4. Contains(T item): 检查列表中是否包含特定的元素。

  5. CopyTo(T[] array): 将列表中的元素复制到一个数组中。

  6. CopyTo(T[] array, int arrayIndex): 从指定的数组索引开始,将列表中的元素复制到一个数组中。

  7. Find(Predicate<T> match): 查找一个匹配指定条件的元素。

  8. FindAll(Predicate<T> match): 查找所有匹配指定条件的元素。

  9. FindIndex(Predicate<T> match): 获取第一个匹配指定条件的元素的索引。

  10. FindIndex(int startIndex, Predicate<T> match): 从指定的起始索引开始,获取第一个匹配指定条件的元素的索引。

  11. FindLast(Predicate<T> match): 获取最后一个匹配指定条件的元素。

  12. FindLastIndex(Predicate<T> match): 获取最后一个匹配指定条件的元素的索引。

  13. ForEach(Action<T> action): 对列表中的每个元素执行指定的操作。

  14. GetEnumerator(): 返回一个用于遍历列表的 Enumerator

  15. IndexOf(T item): 获取特定元素在列表中的第一个索引。

  16. IndexOf(T item, int index): 从指定索引开始,获取特定元素在列表中的索引。

  17. Insert(int index, T item): 在指定位置插入一个元素。

  18. InsertRange(int index, IEnumerable<T> collection): 从指定位置开始,插入一系列元素。

  19. LastIndexOf(T item): 获取特定元素在列表中的最后一个索引。

  20. Remove(T item): 从列表中移除第一个匹配的元素。

  21. RemoveAt(int index): 从列表中移除指定索引处的元素。

  22. RemoveAll(Predicate<T> match): 移除列表中所有匹配指定条件的元素。

  23. RemoveRange(int index, int count): 移除列表中从指定索引开始的一系列元素。

  24. Reverse(): 反转列表中元素的顺序。

  25. Reverse(int index, int count): 反转列表中指定范围的元素顺序。

  26. Sort(): 按升序对列表中的元素进行排序。

  27. Sort(Comparison<T> comparison): 使用指定的比较器对列表中的元素进行排序。

  28. Sort(IComparer<T> comparer): 使用指定的比较器实现对列表中的元素进行排序。

  29. ToArray(): 将列表转换为数组。

  30. TrimExcess(): 减少列表的容量以匹配其元素的数量。

  31. TrueForAll(Predicate<T> match): 检查列表中的所有元素是否都满足指定的条件。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 提高LabVIEW软件的健壮性
  • 南方科技大学马永胜教授给年轻人使用AI工具上的建议
  • 教师管理小程序的设计
  • 机器视觉/自然语言/生成式人工智能综合应用实验平台-实训平台-教学平台
  • Qt QChart 图表库详解及使用
  • Linux调试器-gdb使用以及Linux项目自动化构建工具-make/Makefile
  • 三级_网络技术_11_路由设计技术基础
  • 今年嵌入式行情怎么样?
  • PHP禁止IP访问和IP段访问(代码实例)
  • Git的稀疏检出(sparse checkout)
  • eclipse ide中文件编码的修改,解决中文乱码的问题。
  • 独立开发者系列(23)——Linux掌握小结
  • websockt初始化,创建一个webSocket示例
  • 安装Go语言常用工具
  • three-platformize 微信小程序 uniapp 使用截图功能
  • 【个人向】《HTTP图解》阅后小结
  • HTTP中的ETag在移动客户端的应用
  • Java 最常见的 200+ 面试题:面试必备
  • Javascript基础之Array数组API
  • Java的Interrupt与线程中断
  • java小心机(3)| 浅析finalize()
  • js 实现textarea输入字数提示
  • JS字符串转数字方法总结
  • Laravel 实践之路: 数据库迁移与数据填充
  • Meteor的表单提交:Form
  • Python打包系统简单入门
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 初识 webpack
  • 代理模式
  • 当SetTimeout遇到了字符串
  • 后端_MYSQL
  • 开发基于以太坊智能合约的DApp
  • 前端攻城师
  • 如何优雅地使用 Sublime Text
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 时间复杂度与空间复杂度分析
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 微信支付JSAPI,实测!终极方案
  • 在Unity中实现一个简单的消息管理器
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • # 数据结构
  • # 职场生活之道:善于团结
  • #07【面试问题整理】嵌入式软件工程师
  • #LLM入门|Prompt#3.3_存储_Memory
  • (1)svelte 教程:hello world
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (4)(4.6) Triducer
  • (pytorch进阶之路)扩散概率模型
  • (Ruby)Ubuntu12.04安装Rails环境
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)JPA - JQPL 实现增删改查