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

C# Array和ArrayList有什么区别

在C#中,ArrayArrayList是集合类型,用于存储一组元素,但它们之间有几个关键区别:

  1. 类型安全:

    • Array是类型安全的,意味着它只能存储一种特定类型的元素。例如,一个int[]数组只能存储int类型的元素。
    • ArrayList不是类型安全的,可以存储任何类型的对象,即它可以存储object类型的元素。因此你可以将任何类型的对象添加到ArrayList中,这在编译时不会报错,但可能在运行时引发类型错误。
  2. 性能:

    • Array由于是类型安全且固定大小的,通常在性能上比ArrayList更优,尤其是在类型转换和装箱操作方面。
    • ArrayList在添加元素时可能需要动态扩展其大小,这个过程涉及到内存分配和数组复制,可能会导致性能开销。
  3. 大小:

    • Array的大小在创建时被确定,之后不能改变。
    • ArrayList的大小是动态的,可以随着元素的添加和移除而增长或缩小。
  4. 功能和方法:

    • Array提供了基础的数组操作功能,例如长度查询、索引访问和迭代等。
    • ArrayList提供了更多的集合操作方法,如添加、删除、查找、插入和排序等。
  5. 泛型支持:

    • Array支持泛型,但通常以非泛型的形式使用,例如int[]string[]等。
    • ArrayList不支持泛型。如果你需要一个支持泛型的动态数组,应该使用List<T>,它允许你创建一个类型安全的列表,例如List<int>List<string>
  6. .NET版本:

    • Array一直是.NET Framework的一部分。
    • ArrayList是早期.NET版本中的非泛型集合。自从.NET 2.0引入了泛型之后,List<T>通常被推荐使用,因为它提供了类似ArrayList的功能,同时增加了类型安全和更好的性能。

在实际编程中,推荐尽可能使用泛型集合,例如List<T>,因为它们提供了类型安全和其他性能优势。ArrayList主要是为了向后兼容保留的,新的代码中应避免使用它。

下面分别给出ArrayArrayList的简单示例。

首先是一个Array的示例:

using System;

class ArrayExample
{
    static void Main()
    {
        // 创建一个int类型的数组,并初始化
        int[] intArray = new int[5] { 1, 2, 3, 4, 5 };

        // 遍历数组并打印元素
        for (int i = 0; i < intArray.Length; i++)
        {
            Console.WriteLine(intArray[i]);
        }

        // 修改数组的第一个元素
        intArray[0] = 10;
        
        // 打印修改后的第一个元素
        Console.WriteLine("Updated first element: " + intArray[0]);
    }
}

接下来是一个ArrayList的示例:

using System;
using System.Collections;

class ArrayListExample
{
    static void Main()
    {
        // 创建一个ArrayList
        ArrayList arrayList = new ArrayList();

        // 添加元素
        arrayList.Add(1);
        arrayList.Add("two");
        arrayList.Add(3);
        arrayList.Add(4.5);

        // 遍历ArrayList并打印元素
        foreach (object obj in arrayList)
        {
            Console.WriteLine(obj);
        }

        // 删除第一个元素
        arrayList.RemoveAt(0);

        // 打印删除元素后的结果
        Console.WriteLine("After removal:");
        foreach (object obj in arrayList)
        {
            Console.WriteLine(obj);
        }

        // 修改第一个元素,需要先进行类型转换
        // 由于ArrayList不是类型安全的,我们需要确保执行正确的类型转换
        if (arrayList[0] is string)
        {
            arrayList[0] = "two updated";
        }

        // 打印修改后的元素
        Console.WriteLine("Updated first element: " + arrayList[0]);
    }
}

在这两个示例中,我们看到了ArrayArrayList的基本操作。Array示例中我们创建了一个整型数组,并初始化和修改了它的元素。在ArrayList示例中,我们添加了不同类型的元素,演示了它的非类型安全性,并且展示了如何添加、移除和修改元素。注意,使用ArrayList时,我们在修改或读取元素之前,可能需要进行显式的类型转换。


http://www.kler.cn/news/134402.html

相关文章:

  • WPF拖拽相关的类
  • 详解Java设计模式之职责链模式
  • S7-1200PLC 作为MODBUSTCP服务器通信(多客户端访问)
  • Web安全研究(五)
  • python中Thread实现多线程任务
  • iTerm2+oh-my-zsh搭个Mac电脑上好用好看终端
  • Zotero在word中插入参考文献
  • 队列和微服务的异步通信
  • Python选择排序和冒泡排序算法
  • linux基础:4:gdb的使用
  • 保姆级 | Nginx编译安装
  • golang学习笔记——条件表达式
  • 【Dubbo】Dubbo负载均衡实现解析
  • nodejs微信小程序-实验室上机管理系统的设计与实现-安卓-python-PHP-计算机毕业设计
  • 2023数维杯国际赛数学建模竞赛选题建议及B题思路讲解
  • Linux本地docker一键部署traefik+内网穿透工具实现远程访问Web UI管理界面
  • OpenAI 地震!首席执行官被解雇,背后的原因是?
  • linux 定时执行脚本
  • 【Flink】系统架构
  • 力扣372周赛
  • 微机原理练习题_13
  • 计算机网络——物理层-信道的极限容量(奈奎斯特公式、香农公式)
  • ElasticSearch快速入门
  • 【论文阅读】VideoComposer: Compositional Video Synthesis with Motion Controllability
  • 2023/11/15JAVA学习(线程池,Executors,网络编程,InetAddress,UDP,TCP,DatagramSocket)
  • 栈和队列概念
  • Nginx的核心配置文件
  • 自学人工智能难吗?
  • SpringBoot整合Redis使用基于注解的缓存
  • AIGC ChatGPT4 读取接口文件并进行可视化分析