c# 里list和array的应用比较说明

一.简介说明

在.net framework 2.0之前,数组表示可以用Array 和集合类 ArrayList 表示,2.0后,.net 引进了泛型的概念List<>,那么我们的选择就多了一种。 2.0引进泛型其本意是减少类型的装箱拆箱所带来的性能消耗。

二.list和array的特点说明

2.1数组(Array)的特点:

2.1.1静态大小: 数组在创建时需要指定大小,且大小不能更改,如,int[] numbers = new int[3]; 创建了一个包含3个整数的数组;

2.1.2类型固定: 数组中的元素类型是固定的,无法在运行时更改;

2.1.3直接访问元素: 数组提供了通过索引直接访问元素的方式,如,int value = numbers[1];

2.1.4性能: 由于数组大小固定,可以在内存中分配连续的空间,因此在某些情况下可能具有更好的性能;

2.2List 的特点:

2.2.1动态大小: List 是动态数组,可以根据需要动态调整大小,通过 AddRemove 等方法进行操作;

2.2.2泛型支持: List 是泛型集合,可以存储任意类型的元素,如,List<int> numbers = new List<int>();

2.2.3灵活性: 提供了丰富的方法和属性,如 AddRemoveCount 等,使操作更加灵活;

2.2.4类型灵活: List 可以存储不同类型的元素,而数组中的元素类型是固定的;

三.List和Array的区别

3.1定义方式不同:

List是一个泛型集合,定义时需要指定元素的类型,Array是一个具体类型的数组,其元素类型在定义时就已经确定;

3.2大小不同:

List是大小可变的,可以添加或移除元素,Array的大小在定义时就固定了,不能改变其大小;

3.3内存布局不同:

List基于数组实现,在内存中是连续的,Array在内存中是连续的,并且其元素类型必须相同;

3.4性能不同:

访问Array的元素比List快,因为不需要装箱和拆箱操作,在插入和删除操作上,List相对于Array有优势,因为Array的大小是固定的;

3.5使用场景不同:

当需要频繁的插入和删除操作时,使用List更合适,当需要频繁的随机访问操作时,使用Array更合适,当需要不同类型的元素时,使用List,因为它是泛型的;

四.简单的示例代码,比较List和Array的基本操作

cs 复制代码
using System;
using System.Collections.Generic;
 
public class CollectionComparison
{
    public static void Main()
    {
        // List示例
        List<int> list = new List<int>();
        list.Add(1);
        list.Add(2);
        list.Add(3);
        list.Remove(2);
 
        foreach (var item in list)
        {
            Console.WriteLine(item); // 输出1, 3
        }
 
        // Array示例
        int[] array = new int[3];
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
 
        for (int i = 0; i < array.Length; i++)
        {
            Console.WriteLine(array[i]); // 输出1, 2, 3
        }
    }
}

五.结论

array的效率要比List的要高一些,当数组长度不是很大时,两者没什么区别,建议用List<>,毕竟是可变长度,可以Add,特殊应用还是建议用array,选择List还是Array,通常取决于具体的需求和场景。

相关推荐
与火星的孩子对话30 分钟前
Unity进阶课程【六】Android、ios、Pad 终端设备打包局域网IP调试、USB调试、性能检测、控制台打印日志等、C#
android·unity·ios·c#·ip
future141236 分钟前
C#每日学习日记
java·学习·c#
coding随想40 分钟前
JavaScript中的BOM:Window对象全解析
开发语言·javascript·ecmascript
凌肖战1 小时前
力扣网编程55题:跳跃游戏之逆向思维
算法·leetcode
念九_ysl1 小时前
Java 使用 OpenHTMLToPDF + Batik 将含 SVG 遮罩的 HTML 转为 PDF 的完整实践
java·开发语言·pdf
yaoxin5211231 小时前
124. Java 泛型 - 有界类型参数
java·开发语言
zhuyasen2 小时前
定义即代码!这个框架解决了90%的Go开发者还在低效开发项目的问题
架构·go·gin
LCG元2 小时前
云原生微服务间的异步消息通信:最终一致性与系统容错的架构实战
微服务·云原生·架构
liulilittle2 小时前
深度剖析:OPENPPP2 libtcpip 实现原理与架构设计
开发语言·网络·c++·tcp/ip·智能路由器·tcp·通信
88号技师2 小时前
2025年6月一区-田忌赛马优化算法Tianji’s horse racing optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法