首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArrayList有什么问题?

ArrayList有什么问题?
EN

Stack Overflow用户
提问于 2010-07-25 03:43:21
回答 6查看 4.8K关注 0票数 20

最近我在上问了一个问题,其中提到了使用c# ArrayList作为解决方案的可能性。有人评论说,使用数组列表是不好的。我想更多地了解这一点。我以前从来没有听过关于arraylist的这种说法。有人能告诉我使用数组列表可能出现的性能问题吗?

c#。.net-2

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-25 03:45:13

ArrayList的主要问题是它使用了object --这意味着你必须对你封装的任何东西进行转换。它是泛型出现之前的残余,可能只是为了向后兼容。

ArrayList没有泛型列表所具有的类型安全性。性能问题在于需要将对象转换回原始对象(或者发生隐式装箱)。

当你使用一个值类型时,隐式装箱就会发生--它在被放入ArrayList时被装箱,而在被引用时被取消装箱。

问题不仅在于性能,还在于可读性和正确性。自从泛型出现以来,这个对象已经过时了,只有在.NET 1.0/1.1代码中才需要它。

票数 37
EN

Stack Overflow用户

发布于 2010-07-25 03:49:04

如果你存储一个值类型(整型,浮点型,双精度型,等等-或者任何结构),ArrayList将在每个存储上导致装箱,在每个元素访问时取消装箱。这可能会对性能造成重大影响。

此外,ArrayList完全缺乏类型安全性。因为所有的东西都是以“对象”的形式存储的,所以作为一个开发人员,你有额外的负担来保证它的安全。

此外,如果您想要存储对象的行为,则可以始终使用List<object>。与ArrayList相比,这没有缺点,而且它有一个很大的(IMO)优势:它从一开始就让您的意图(存储非类型化对象)变得清晰。

ArrayList实际上只存在于.NET 1.1代码中,而且应该只使用它。在.NET 2+中真的没有理由使用它。

票数 14
EN

Stack Overflow用户

发布于 2010-07-25 03:48:09

ArrayList不是泛型类型,因此它必须将您放置在其中的所有项存储为对象。这是糟糕的,原因有两个。首先,在将值类型放入ArrayList中时,您会强制编译器将值类型装箱为引用类型,这可能会带来很大的开销。其次,您现在必须强制转换从数组列表中取出的所有内容。这很糟糕,因为你现在需要确保你知道里面有什么对象。

List避免了这些问题,因为它是用正确的类型构造的。例如:

代码语言:javascript
复制
List<int> ints =  new List<int>();
ints.Add(5); //no boxing
int num = ints[0]; // no casting
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3326599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档