C# list 与 arraylist 的区别 使用要点 与性能相关

版权声明:欢迎转载与留言提问 https://blog.csdn.net/qq_25439417/article/details/82115670

首先,我们从数组说起,数组是一种高效的但是不太方便的数据存储方式,之所以不方便,是因为固定长度无法修改。

于是为了充分利用内存,就有了动态数组的概念。

C#中动态数组的实现就是集合接口IList.ArrayList 和List都继承了接口IList(不知道是哪位“高人”让网上流传着List是接口的概念......)

再来讲一下ArrayList中,据了解,有些人喜欢用的ArrayList是因为对存储对象的类型没有要求,用起来方便这时我就想问一句:你在取数据的时候也很方便吗???

如下图:

ArrayList的之所以对类型没有要求,是因为ArrayList的中存储的类型都是对象类型,而其他类型与对象类型进行转换的过程就会产生拆箱装箱,拆箱装箱又是一笔不能忽视的开销。

伴随而来的就是类型的不安全。如果是熟悉动态语言的朋友,可能觉得没什么,但是类型安全在静态语言中还是非常重要的。

而名单泛型在声明时就已经限制了存储内容的数据类型,所以不存在跟对象类型的转换也就没有了装箱和拆箱的操作,并且是类型安全的。所以,在平时的使用中,如果只是为了使用动态数组,那么就不要考虑的ArrayList了。

最后贴一段正确的使用代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Test : MonoBehaviour {
 
    private void Start()
    {
        TestA();
        TestB();
    }
 
    private void TestA()
    {
        ArrayList array = new ArrayList();
        array.Add("123");
        array.Add(123);
 
        try
        {
            int value = (int)array[0];
            Debug.Log("TestA value:"+value);
        }
        catch (System.Exception e)
        {
            Debug.LogError("错误:" + e);
        }
    }
 
    private void TestB()
    {
        List<int> list = new List<int>();
        list.Add(123);
 
        int value = list[0];
        Debug.Log("TestB value:" + value);
    }
}

最后,给看到这篇帖子的新手们一点忠告,网络上的内容质量高低不齐,作为一个程序,首先要有自己判断是非的能力,不要人云亦云。

在学习的过程中也不要有那种点到为止的概念,不管什么知识点,都要一探究竟,不要知其然而不知其所以然。

也希望能有高手指点我帖子中的不足。

猜你喜欢

转载自blog.csdn.net/qq_25439417/article/details/82115670
今日推荐