C# 泛型之list<T>与ArrayList<object>比较

从C#中的ArrayList和List的区别说起 List和ArrayList作为C#中的集合,因为其长度动态,所以用起来较数组方便。但是很多新手都被网络上流传的所谓答案误导了。 阅读详情

类型List中采用泛型T的方式加入内容

而ArrayList中采用object的方式加入内容

using System;
using System.Collections.Generic;
using System.Collections;
using System.Diagnostics;

namespace ListDemo
{
    class Program
    {

        static void Main(string[] args)
        {
            ValueTypePerfTest();
            ReferenceTypePerfTest();

            Console.ReadKey();
        }

        private static void ValueTypePerfTest()
        {
            const Int32 count = 100000000;
            using (new OperationTimer("List<Int32>"))
            {
                List<Int32> l = new List<int>();
                for(Int32 n =0; n < count; n++)
                {
                    l.Add(n);
                    Int32 x = l[n];
                }
                l = null;
            }
            using (new OperationTimer("ArrayList of Int32"))
            {
                ArrayList a = new ArrayList();
                for(Int32 n = 0; n<count; n++)
                {
                    a.Add(n);
                    Int32 x = (Int32)a[n];
                }
                a = null;
            }
        }

        private static void ReferenceTypePerfTest()
        {
            const Int32 count = 100000000;
            using (new OperationTimer("List<String>"))
            {
                List<string> l = new List<string>();
                for(Int32 n = 0; n<count; n++)
                {
                    l.Add("X");
                    String x = l[n];
                }
                l = null;
            }
            using (new OperationTimer("ArrayList of string"))
            {
                ArrayList a = new ArrayList();
                for(Int32 n = 0;  n< count; n++)
                {
                    a.Add("X");
                    string x = (string)a[n];
                }
                a = null;
            }
        }
    }

    internal sealed class OperationTimer:IDisposable
    {
        private Stopwatch m_stopwatch;
        private string m_text;
        private Int32 m_collectionCount;

        public OperationTimer(string text)
        {
            PrepareForOperation();
            m_text = text;
            m_collectionCount = GC.CollectionCount(0);

            m_stopwatch = Stopwatch.StartNew();
        }

        public void Dispose()
        {
            Console.WriteLine("{0} (GCs={1,3})", 
                (m_stopwatch.Elapsed),
                GC.CollectionCount(0) - m_collectionCount, 
                m_text);
        }

        private static void PrepareForOperation()
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
        }
    }
}

运行结果:

分析:

ValueTypePerfTest
中采用数值类型进行性能比较,list比arraylist要快得多。此外arraylist将对int32进行大量的装箱操作,最终需389次的垃圾回收

ReferenceTypePerfTest
中采用引用类型进行性能比较,没有太多的差异。


【唐老狮】C#——ArrayList 【ArrayList】 本质 object数组 特点 自动调整空间大小 存在装箱拆箱 存储任意类型 ArrayList是一个C#为我们封装好的类,它的本质是一个object类型的数组,ArrayList类帮助我们实现了很多方法,比如数组的增删查改,都提供给了我们对应的方法,方便我们使用,不需要我们自己来实现相关的逻辑。 回顾数组的存储结构 数组的声明必需一开始就声明好具体占多少内存空间,当我们进行增删查改时需要考虑扩容和移位相关的复杂操作... 阅读详情

相关推荐

RabbitMQ的使用(JAVA)

Java快速上手的MQ上线!

.............. 1万+

泛型T和Object的区别

Object范围非常广,而T从一开始就会限定这个类型(包括它可以限定类型为Object)。Object由于它是所有类的父类,所以会强制类型转换,而T从一开始在编码时(注意是在写代码时)就限定了某种具体类型,所以它不用强制类型转换。(之所以要强调在写代码时是因为泛型在虚拟机中会被JVM擦除掉它的具体类型信息,这点可参考泛型,在这里不做引申)。@Test public void test123() {...

qq_27631217的博客 5855

2024 年高教社杯全国大学生数学建模竞赛题目【A/B/C/D/E题】完整论文+代码+结果

2024国赛A题参考论文。2024国赛D题参考论文。2024国赛E题参考论文。2024国赛B题参考论文。2024国赛C题参考论文。

qq_52590045的博客 5323

C# 集合(ArrayList)的方法和使用

中文意思: 集合和数组的区别? 数组: 只能放同一个类型的数据 ,例如:int 那么只能给他提交int类型的数据,并且长度赋值了就无法改变,比较单一 集合: 可以存放任何类型的数据(继承于object)如int,string等都可以直接添加,他的长度可以任意改变, Add(添加数据): 集合创建后,如要对他就行赋值,就要使用Add()方法进行添加, 集合可以添加任何类型的数据 ArrayList a = new ArrayList(); a.Add(“小马哥的棺材板”); //字符串类型 a.Add

生产队的驴 1万+

手把手教你用WKT文件在Petrel中创建自定义坐标系统(附CGCS2000转换模板)

本文详细介绍了如何在Petrel软件中利用WKT文件创建自定义坐标系统,并重点提供了CGCS2000坐标系的完整转换模板与实战步骤。通过解析坐标系统的三大支柱(大地坐标系、投影坐标系、基准转换)和WKT文件结构,指导用户从零开始构建适用于本土化项目的坐标系统,确保地质建模与空间数据处理的精度与一致性。

gpt4scribbler的博客 261

AI驱动的iOS逆向工程自动化:14阶段工作流与Ghidra集成实践

逆向工程是软件安全分析的核心技术,通过反汇编、调试等手段解析程序内部逻辑与数据流。其原理在于将编译后的二进制代码还原为可理解的逻辑结构,从而发现潜在漏洞或理解软件行为。在移动安全领域,iOS逆向工程具有重要技术价值,能够用于安全审计、漏洞挖掘与恶意软件分析。传统iOS逆向依赖ipsw、class-dump、Frida等工具链组合,存在学习曲线陡峭与流程碎片化问题。本文介绍的ios-reverse-skills项目创新性地将14阶段逆向工程方法论封装为AI可调用的标准化脚本集,通过Ghidra脚本实现Swif

weixin_27268733的博客 419

C#系列之ArrayList

C#最核心的部分已经学习结束了,接下来我们将学习一些进阶知识点。学习完这些能够让你的程序更加完美。

2303_76354097的博客 2087

如何设置Xilinx以太网IP核的Pause帧处理

这里要注意,为什么是或,第一个条件是该功能使能取反,也就是说,如果你设置使能不打开的话,这个条件是直接满足的;先来看图中第二句,判断该以太网数据包为Global Pause帧(gpp),首先要满足Step1,然后是由上图中第二句代码(assign global_pause_packet)后面的所有项“与”(&&)起来的,就是说要满足后面所有的项,分别是DA符合,SA符合,Etype符合,Opcode符合,并且使能了该功能(即设置ctl_rx_enable_gpp=1)。如果没通过,则进入Step3。

qq_43416206的博客 612

AI模型推理延迟优化实战:从理论到工程实践

模型推理延迟是AI应用落地的关键性能指标,直接影响用户体验和业务效果。通过模型压缩技术如剪枝和量化,可以显著减少计算量和内存占用,而架构优化如EfficientNet和知识蒸馏则能在保持精度的同时提升效率。工程实践中,计算图优化和内存访问策略进一步释放硬件潜力。结合GPU加速和边缘计算等硬件方案,最终实现端到端的延迟优化。本文以电商推荐和工业质检为例,展示如何通过全链路优化将延迟从数百毫秒降至几十毫秒,为实时AI应用提供可靠解决方案。

weixin_33721427的博客 367

RK3568平台开发系列讲解:Linux wifi的调试

查询结果中state为ENABLE,表示hostapd程序启用成功。首先查看设备是否存在。

内核笔记 161

《信息化项目文档模板十二——业务需求新增/变更审批确认表 》

系列文章目录 《信息化项目文档模板一——项目需求说明书》 《信息化项目文档模板二——项目启动会文档模板》 《信息化项目文档模板三——会议纪要模板》 《信息化项目文档模板四——系统项目蓝图设计模板》 《信息化项目文档模板五——系统详细设计模板》 《信息化项目文档模板六——系统详细设计模板》 《信息化项目文档模板七——系统开发计划模板》 《信息化项目文档模板八——系统功能测试模板》 《信息化项目文档模板九——系统压力测试模板》 《信息化项目文档模板十——系统推广上线计划模板》 《信息化项目文档模板十一——系统用

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1704

c#泛型<T>和object和关键字var的区别

C#中百object是一切类型的基类,可以用来表示所有类型。 而泛型是指将类型参数化以达到代码复用提高软件开发工作效率的一种数据度类型。泛型不用装箱拆箱。 你可以将泛型理解成替换,在使用的时候将泛型参数替换成具体的类型,这个过程是在编译的时候进行的,使用泛型编译器依然能够检测出类型错误。 而object表示其他类型是通过类型转换来完成的,而所有类知型转化为object类型都道是合法的,所以即...

qq_33574852的博客 2366

Android NDK/JNI面试题大全及参考答案(3万字长文)

是一套工具集合,它允许开发者为Android平台编写原生应用程序或者应用程序的部分模块。NDK 主要用于开发那些需要高性能计算的应用程序,例如游戏引擎、图像处理软件或音频/视频编码解码器等。通过使用 C 或 C++ 编写代码,开发者可以利用硬件加速功能,提高应用性能。NDK 提供了一系列工具来帮助开发者完成从源代码到可执行文件的整个过程,包括编译、链接、调试等功能。

大模型大数据攻城狮的专栏 1245

ArrayList排序Sort()方法(转)

//使用Sort方法,可以对集合中的元素进行排序。Sort有三种重载方法,声明代码如下所//示。 public void Sort(); //使用集合元素的比较方式进行排序 public void Sort(IComparer comparer); //使用自定义比较器进行排序 public void Sort(int index, int count, IC...

weixin_30291791的博客 297

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java中Array/List/Map/Object与Json互相转换详解(转载)

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C+...

weixin_30633949的博客 120

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

遍历 ArrayList 对象的方法

//第一种遍历 ArrayList 对象的方法foreach(object o in al){Console.Write(o.ToString()+" ");}//第二种遍历 ArrayList 对象的方法IEnumerator ie=al.GetEnumerator();while(ie.MoveNext()){Console.Write(ie.Curret.ToString()+" ");}

xxj123x的专栏 1363

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JVM基础

字节码指令集可以直接看对照表hhh,操作时,会将操作数压进栈帧中操作数栈的栈顶。之后类似C语言cpu与变量存储(内存)和栈的交互,本地变量在栈帧的本地变量表中例:在栈顶压入常量:4将栈顶的数存入变量1。

阿巴阿巴 766

C#泛型列表List<T>的基本用法分享

/ 可以使用只读集合,使用AsReadOnly方法() 返回ReadOnlyCollection类型,它与List操作是一样的,但是一但有修改集合的操作,就会刨出异常。Console.WriteLine( "-----------------用ForEach方法输出------------------------");Console.WriteLine( "----------------访问元素------------------------");

xiaoweids的博客 621

C#中的ArrayList类的添加、删除、查找、遍历

一、ArrayList类定义ArrayList类相当于一种高级的动态数组,它是Array类的升级版本。ArrayList类位于System.Collections命名空间下,它可以动态地添加和删除元素。可以将ArrayList类看作扩充了功能的数组,但它并不等同于数组。使用ArrayList类要添加引用:二、ArrayList类与数组的区别与数组相比,ArrayList类为开发人员提供了以下功能。☑ 数组的容量是固定的,而ArrayList的容量可以根据需要自动扩充。

wenchm的博客 1万+

Java中的Object、T(泛型)、?区别

因为最近重新看了泛型,又看了些反射,导致我对Object、T(以下代指泛型)、?产生了疑惑。 我们先来试着理解一下Object类,学习Java的应该都知道Object是所有类的父类,注意:那么这就意味着它的范围非常广!首先记住这点,如果你的参数类型时Object,那么的参数类型将非常广! 《Thinking in Java》中说很多原因促成了泛型的出现,最引人注目的一个原因就是为了创造容器类。...

weixin_33747129的博客 1112

T跟object

泛型跟object的最大区别: 泛型不用装箱拆箱,object必须装箱拆箱

cysx009的博客 202

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

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

醉挽~清风 796

C# ArrayList 互转object[]

ArrayList al = new ArrayList(); al.Add(1); al.Add(2); //此时al中有两个元素 //直接调用ToArray()函数进行转换,使用save接收 object[] save = al.ToArray(...

刘欢的博客 2036

C#中的简单数据结构类ArrayList

需要掌握知识:万物之父:objectobject是所以类的基类,可以装载任何类ArrayLIst是一个可以自动扩容的object数组优点:可以存放任意类型的数据缺点:使用了object就会涉及到装箱和拆箱,装箱会将值类型转化为引用类型,拆箱会将引用类型转化为值类型,涉及栈和堆之间的转换。

unity小白学习 292

Object转List

public static <T> List<T> castList(Object source, Class<T> clazz) { List<T> result = new ArrayList<>(); if(source instanceof List<?>) { for (Object o : (List<?>) source) { ...

MrLiar的博客 2244
上一篇: C# 中线程资源访问互斥量
下一篇: C#线程间同步的几种实现方式
conquerwave
博客等级 码龄18年 57粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值