从C#中的ArrayList和List的区别说起

引擎:Unity5.5.1

IDE:VS2015


最近公司招人,自己整理了一套试题,题里设了几个坑。因为是招初级程序,关于ArrayList和List的区别的这道题,基本都翻了。

原因很简单,这道题在所有网上能找到的Unity程序面试题中都有,但是很不幸,答案是错误的。


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

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

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


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

如下图:


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

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


而List泛型在声明时就已经限制了存储内容的数据类型,所以不存在跟object类型的转换也就没有了装箱和拆箱的操作,并且是类型安全的。所以,在平时的使用中,如果只是为了使用动态数组,那么就不要考虑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/u010133610/article/details/64907343
今日推荐