C# 泛型集合List和非泛型集合ArrayList的性能比较

C#面试题及详细答案120道(21-30)-- 集合与泛型 包括C#集合类型、数据结构实现原理等。其中重点介绍了C#中常用的集合类型(List、Dictionary、HashSet等)的特点和适用场景,对比了Array与ArrayList、List<T>与ArrayList的区别,并深入解析了Dictionary<TKey, TValue>的哈希表实现原理及冲突解决方法。内容包含代码示例和性能分析,适合面试准备和技术提升。 阅读详情

在使用ArrayList这样的非泛型集合的过程中,要进行装箱和拆箱操作,会有比较大的性能损失,

而使用泛型集合就没有这样的问题。

 

现做一简单测试如下:



    //用来记录开始和结束的时间  
    DateTime startTime = new DateTime();  
    DateTime endTime = new DateTime();  
      
    //定义集合类型ArrayList的一个实例  
    ArrayList list = new ArrayList();  
      
    //取得当前时间  
    startTime = DateTime.Now;  
      
    //★★★★★★★★①使用ArrayList类★★★★★★★★  
    //ArrayList的add方法的参数是Object型,  
    //当我们把int型作为参数传入的时候需要做装箱操作  
    //装箱操作将值类型转化为Object类型  
    for (int i = 0; i < 1000000; i++)  
    {  
        list.Add(i);  
    }  
      
    int iCount = 0;  
    //当我们使用int型的时候需要做拆箱操作操作  
    //拆箱操作将应用类型转化为Object类型,拆箱过程要做大量的工作  
    foreach (int i in list)  
    {  
        iCount += 1;  
    }  
      
    Console.WriteLine("使用ArrayList的结果 : {0}", iCount.ToString());  
      
    //取得结束时间并计算差值  
    endTime = DateTime.Now;  
    TimeSpan ts = endTime - startTime;  
      
    Console.WriteLine("使用ArrayList的耗时 :" + ts.TotalMilliseconds);  
      
    //★★★★★★★★②使用泛型类★★★★★★★★  
    //使用List的泛型定义List<T>,int类型在编译器动态生成的类中本替换为int型  
    //执行过程中不再执行装箱拆箱操作  
    List<int> list2 = new List<int>();  
      
    startTime = DateTime.Now;              
      
    for (int i = 0; i < 1000000; i++)  
    {  
        list2.Add(i);  
    }  
      
    iCount = 0;  
    foreach (int i in list2)  
    {  
        iCount += 1;  
    }  
      
    Console.WriteLine("使用泛型的结果 : {0}", iCount.ToString());  
      
    endTime = DateTime.Now;  
    ts = endTime - startTime;  
      
    Console.WriteLine("使用泛型的耗时 :" + ts.TotalMilliseconds);  
      
    //显示三次结果如下  
      
    /* 第一次 
     * 使用ArrayList的耗时 :92 
     * 使用泛型的耗时 :25 
     *  
     * 第二次 
     * 使用ArrayList的耗时 :96 
     * 使用泛型的耗时 :22 
     *  
     * 第三次 
     * 使用ArrayList的耗时 :90 
     * 使用泛型的耗时 :22 
     *  
     * 由此可以明显看出两者的差别 
     * 这里仅仅是时间上的,并不包括对内存消耗的统计 
     *  
     * ※但是也要注意到差别的单位是毫秒, 
     * 我这里只想说明用泛型是有好处的, 
     * 但也不可过分追求程序的孰优孰劣, 
     * 总之要把握好这个度,适合自己的才是最好的  
     * O(∩_∩)O~ 
     */  
      
    Console.Read();  



基于STM32的智能垃圾分类机器人 垃圾分类是城市管理的重要环节,传统人工分拣效率低、成本高。本文设计了一款基于STM32的智能垃圾分类机器人,通过视觉识别与机械臂协同作业,实现垃圾自动分类与投放,适用于社区、公共场所等场景,可显著提升垃圾分类效率。:STM32H743(480MHz Cortex-M7,支持AI加速)本系统实现了垃圾分拣的自动化,显著提升了分类效率。OV5640摄像头(500万像素,支持JPEG输出)支持4类垃圾识别(可回收/厨余/有害/其他)问题讨论,stm32的资料领取可以私信!超声波避障(探测距离0.1-4m) 阅读详情

相关推荐

人机交互期末复习笔记

人机交互期末复习笔记 进行复习的童鞋们可以跟着清华大学《人机交互基础教程第3版(孟祥旭、李学庆、杨承磊、王璐编著)的书籍参照借阅。上面的一字一句皆是敲键盘敲出来的,并且掌握课本的基本内容。 博客中的知识点有些地方会进行粗略的跳过(主要的大框架没有省略),建议有同样需求的读者结合书本与博客一同借阅。本博客有错误的地方多多指正,谢谢大家~ 文章目录人机交互期末复习笔记第一章 绪论 P11.1 人机交互的概念1.2 人机交互的研究内容1.3 人机交互的发展历史(只介绍人机交互阶段)第二章 感知和认知基础 P122

server643的博客 5024

C#中泛型效率对比(ArrayList和List<T>)

泛型一般效率比较高,因为它的操作并不是装箱拆箱,也不涉及object类型转换。 下面的一段程序主要测试泛型列表List与数组列表ArayList之间的性能对比。这两种都可以创建列表,且都可以面对不同的数据类型。泛型的数据类型编程中指定。ArrayList类型为object类,会进行数据的装箱和拆箱。 using System; using System.Collections.Generic; ...

weixin_40786497的博客 1337

MySQL 分库分表及其平滑扩容方案

MyCAT不仅仅可以用作读写分离,以及分表分库、容灾管理,而且可以用于多租户应用开发、云平台基础设施,让你的架构具备很强的适应性和灵活性。分表对于一张多行(记录)多列(字段)的二维数据表,又分两种情形(1)垂直分表竖向切分,不同分表存储不同的字段,可以把不常用或者大容量、或者不同业务的字段拆分出去;扩容前每个节点的数据,有一半要迁移至一个新增节点中,对应关系比较简单。此时,四个节点的数据都已完整,只是有冗余(多存了和自己配对的节点的那部分数据),择机清除即可(过后随时进行,不影响业务)。...

m0_71777195的博客 1929

深究C#中数组、ArrayList和List三者的区别

前言:在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢?在本篇博文中,让我们共同探讨! 一、数组 1、概念 对于数组,相信我们大家都很熟悉了,它是一种数据结构,其中包含许多通过计算索引访问的变量。 数组中的变量(亦称为数组的元素)均为同一种类型,我们将这种类型称为数组的元素类型。 同时我们也要知道,数组的类型是引用类型,声明数组变量只是为引用数组实例预留空间。 实际的数组实例是在运行时使用 new 运算符动态创建而成。 new 运算指定了新数组实例的长度,然后在此

路虽远,行则必至! 3065

arcgis根据矢量范围统计栅格数据众数、最大值、均值、中位数、最小值、少数等

像元统计数据 根据多个栅格数据计算每个像元的统计数据。 可用的统计数据有:众数、最大值、均值、中位数、最小值、少数、范围、标准差、总和及变异度。 https://desktop.arcgis.com/zh-cn/arcmap/10.3/tools/spatial-analyst-toolbox/an-overview-of-the-local-tools.htm ...

GIS哼哈哈的博客 6万+

Android Treble 简介

上面两段话来自官网上,Android 8.0 重新设计了 Android 操作系统框架(在一个名为“Treble”的项目中),以便让制造商能够以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。本文主要整理一下Android Treble框架。

私房菜 9275

C# 中 Array、ArrayList 和 List 的比较

特性ArrayArrayListList类型基础数据结构非泛型集合泛型集合类型安全类型安全非类型安全类型安全性能固定大小,高性能动态大小,性能较低动态大小,高性能灵活性固定大小动态大小动态大小使用场景固定大小集合动态集合(已过时)动态集合(推荐)

lzcbaba的博客 207

YOLOv8集成EMA注意力机制YOLOv8完整教程 将EMA注意力机制集成到YOLOv8框架中

YOLOv8教程这篇文章介绍了如何将EMA(高效多尺度注意力)机制集成到YOLOv8目标检测框架中。YOLOv8 EMA注意力机制通过多尺度特征融合和高效计算,能够提升模型对关键特征的关注能力。文章详细解析了EMA的原理和结构设计,包括其核心组件和前向传播过程。此外,提供了完整的实现指南,包括环境准备、项目结构设置、EMA模块代码实现(包含分组处理、空间注意力计算和特征融合等关键步骤)。YOLOv8 YOLOv8 YOLOv8 YOLOv8 YOLOv8

FJN110的博客 928

C#泛型集合和非泛型集合的异同点及声明方式

C#泛型集合和非泛型集合的异同点及声明方式

JYWWQw的博客 2304

BUG调试案例六:RK3568+国产YT8531网络PING调试案例

这次调试过程让我对后续类似问题的应对更加有信心。如果芯片在其他项目中已被验证可用,那么在我们的设计中原则上也应该能够正常工作。如果出现异常,就必须坚持追根溯源,找出具体原因和根本问题。每一次问题的解决,都是一次深入理解系统和提升能力的机会 —— 在不断探索和学习中,也在持续成长。

案例文章,高速信号 2334

【数字IC设计】芯片设计中的RDC

在芯片设计中,RDC是的缩写,类似于CDC(clock domain crossing),由于现在SOC芯片是有很多ECUs组成,为了使整个系统能够快速从复位中恢复, 用户希望SOC里面每个ECU模块都可以有自己独立的异步复位信号,这样可以在出问题的时候只复位有错误逻辑的模块,而使其它模块保持正常工作。

qq_40268672的博客 2188

C#中常用的泛型集合和非泛型集合(ArrayList、Hashtable、List、Dictionary)

前言       集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类实现了相同的接口。       集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中,Object

自学之路←_← 2874

Open3D 进阶(22)间接平差法拟合空间曲线

空间曲线拟合在电力线三维重建中有着广泛的应用,本文利用python使用间接平差法对三维空间曲线的拟合进行代码实现。

点云侠的博客 1058

C#里面的不同集合(数组、ArrayList集合、List泛型)

目录 数组(Array) 集合(ArrayList) 泛型(List) 那如何选择使用哪一个集合呢? 思维导图 数组(Array) 什么是数组? 是一个存储相同类型元素的固定大小的顺序集合。 有什么作用吗? 一次声明相同类型的数。 有哪些特点? 元素是相同类型 大小固定 元素连续存储 是引用类型(必须分配堆上的内存) 数组有哪些优点? 在内存中连续存储,因此可以快速而容易地从头到尾遍历元素,可以快速地修改元素 数组有哪些缺点呢? 创建时必须...

一起加油吧~ 3705

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C#泛型与非泛型集合类的区别与使用详解

C# 语言和公共语言运行时 (CLR) 在 2.0 版本中添加了泛型。泛型将类型参数的概念引入 .NET Framework,这样就可以设计具有相同特征的类和方法:在客户端代码声明并初始化这些类和方法之前,这些类和方法会延迟指定一个或多个类型(使用占位符~3:数字代表类型参数个数)。

MrLsss的博客 2059

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C#集合/动态数组ArrayList/List<T>集合

List<T>是一个泛型类,允许创建一个元素类型为T的强类型列表。注意:List是一个基于索引的集合,这意味着元素是按顺序存储的。动态扩展:ArrayList的容量可以根据需要自动调整,不需要指定固定大小,当添加的元素超过当前容量时,ArrayList会自动增加容量(通常是原容量的两倍)集合好比容器,将一系列相似的组合在一起,是一个特殊的类,和数组一样,可以通过索引访问集合成员,也可以通过“键”来访问,动态数组代表了可被单独索引的对象的有序集合,他也允许在列表中进行动态内存分配、增加、搜索、排序各项。

wangyuhua_的博客 1385

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【C#】C#中的Array数组,List集合和ArrayList集合

类型安全性:Array和List提供类型安全,而ArrayList不提供。 大小调整:Array大小固定,List和 ArrayList大小可动态调整。 性能:Array通常性能最好,List次之,ArrayList由于装箱和拆箱可能性能最差。 使用场景:Array适合固定大小的集合,List适合动态大小且类型一致的集合,ArrayList适合需要存储不同类型对象的旧代码。

冰茶的博客 2184

C#中List集合的常用方法

C#中List集合的常用方法常用方法和属性常用属性常用方法 List类是ArrayList类的泛型等效类,该类使用大小可按需动态增加的数组实现IList泛型接口。 泛型的好处:它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以性能得到提高。 性能注意事项:在决定使用IList还是使用ArrayList类(两者具有类似的功能)时,记住IList类在大多数情况下执行得更好并且是类型安全的。如果对IList类的类型T 使用引用类型,则两

SQWH_SSGS的博客 1万+

C#中存储数据的集合:数组、集合、泛型、字典

转自:https://www.cnblogs.com/mhq-martin/p/8921470.html 为什么把这4个东西放在一起来说,因为c#中的这4个对象都是用来存储数据的集合……。首先咱们把这4个对象都声明并实例化一下: //数组 string[] m_Str = new string[5]; //集合 ArrayList m_AList = new ArrayList(); /...

Zzz的专栏 5429

java非泛型集合_C# 泛型集合List与非泛型集合ArrayList之性能比较

在使用ArrayList非泛型集合时,要进行装箱和拆箱操作,会有比较大的性能损失,而使用泛型集合,则不会有这样的问题。之前我们也介绍过一篇类似的文章C#泛型 与 非泛型性能比较 类型安全的实例代码,大家可以看看。今天我们用一个例子做下测试,以加深理解。代码如下:复制代码 代码示例://用来记录开始和结束的时间DateTime startTime = new DateTime();DateTime ...

weixin_42533120的博客 217

深入解析C#中的ArrayList、装箱和拆箱

在C#中,数据类型分为值类型和引用类型。值类型:直接存储数据的值。intdoubleboolstruct等。引用类型:存储的是数据的引用(内存地址)。objectstringclass等。将值类型转换为引用类型的过程,称为装箱。简单来说,就是把一个值类型的值包装到object类型的引用中。将引用类型转换回值类型的过程,称为拆箱。也就是从object类型的引用中提取出原始的值类型的值。

菜鸟先飞 1774

c# hash 泛型_C#非泛型集合和泛型集合的超级详解

C# 泛型集合之非泛型集合类与泛型集合类的对应:ArrayList对应ListHashTable对应DictionaryQueue对应QueueStack对应StackSortedList对应SortedList第一 :ArrayList(非泛型集合) 与List(泛型集合)ArrayList 是数组的复杂版本。ArrayList 类提供在大多数 Collections 类中提供但不在 Arra...

weixin_39569389的博客 211

C#--Arraylist,list泛型集合,哈希表,字典

区别和联系 先用两张图帮助大家理解一下他们四者的区别和联系 小杨老师画的图 Arraylist和List泛型集合 从上图可以看出,一个数组只能存储一种类型的数据,而且数据的个数是确定的,在程序设计当中往往不能满足我们的要求,这时候就需用到集合了。arraylist是非泛型集合,它的数据类型为object,可以存储任意类型的数据,同时它是可变长的,使用时需要引入命名空间using S...

醉挽~清风 800
上一篇: MVC TIP3:JQuery通过Ajax提交表单并返回结果
下一篇: Entity Framework中IQueryable, IEnumerable, IList的区别
writtyflame
博客等级 码龄17年 6粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值