从C#中的ArrayList和List的区别说起,
从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);
}
}
执行结果如下:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最后,给看到这篇帖子的新手们一点忠告,网络上的内容质量高低不齐,作为一个程序,首先要有自己判断是非的能力,不要人云亦云。
在学习的过程中也不要有那种点到为止的概念,不管什么知识点,都要一探究竟,不要知其然而不知其所以然。
也希望能有高手指点我帖子中的不足。
相关文章
- 暂无相关文章
用户点评