ArrayList 与 List<object>
Posted
技术标签:
【中文标题】ArrayList 与 List<object>【英文标题】:ArrayList vs List<object> 【发布时间】:2010-09-28 07:29:17 【问题描述】:我在Initialize generic object with unknown type看到了 Jon 的回复:
如果你想要一个集合 包含多种不相关的类型 值,但是,您将不得不使用
List<object>
我不是在比较 ArrayList
和 List<>
,而是比较 ArrayList
和 List<object>
,因为两者都将暴露 object
类型的元素。在这种情况下使用其中任何一个有什么好处?
编辑:这里不关心类型安全,因为这两个类都将object
作为它的项目。仍然需要从object
转换为所需的类型。我对类型安全以外的任何事情都更感兴趣。
编辑:感谢 Marc Gravell 和 Sean 的回答。抱歉,我只能选择 1 作为答案,所以我会同时投票。
【问题讨论】:
【参考方案1】:您可以直接使用List<object>
使用LINQ 扩展方法,但不能使用ArrayList
,除非您注入Cast<object>()
/ OfType<object>
(感谢IEnumerable<object>
与IEnumerable
)。即使您不需要类型安全等,这也很有价值。
速度将大致相同;结构仍然会被装箱,等等 - 所以没有什么可以区分它们的。除了我倾向于将ArrayList
视为“哎呀,有人又在编写遗留代码……”;-p
【讨论】:
【参考方案2】:使用List<object>
的一大好处是,如今大多数代码都是为使用通用类/接口而编写的。我怀疑现在大多数人会编写一个采用IList<object>
而不是IList
的方法。由于ArrayList
没有实现IList<object>
,因此您将无法在这些场景中使用数组列表。
我倾向于将非泛型类/接口视为遗留代码,并尽可能避免使用它们。
【讨论】:
【参考方案3】:在这种情况下,ArrayList
与 List<Object>
那么您不会注意到速度上有任何差异。每个可用的实际方法可能存在一些差异,特别是在 .NET 3.5 和计数扩展方法中,但这与 ArrayList 在某种程度上被弃用有关。
【讨论】:
【参考方案4】:是的,除了类型安全之外,泛型集合实际上可能更快。
来自 MSDN (http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx)
System.Collections.Generic 命名空间包含接口和 定义泛型的类 集合,允许用户 创建强类型集合 提供更好的类型安全性和 性能比非泛型强 类型化的集合。
【讨论】:
List<object>
与使用 ArrayList
相比,在类型安全和性能方面并没有给您太多改进@.【参考方案5】:
做一些基准测试,你就会知道什么表现最好。我猜测差异非常小。
【讨论】:
实际上我不确定问题是否与性能有关,但这是一个好点。我的猜测是由于额外的装箱、拆箱,arraylist 的性能会更差。 @Anonymous:还有什么拳击?ArrayList
和 List<object>
应该有相同数量的装箱/拆箱。
“一个包含多个不相关类型值的集合” - 我的理解是,当向 List 集合对象添加不同类型时,会发生装箱/拆箱,而使用 arraylist 则没有。我想我错了。【参考方案6】:
List 是 ArrayList 的类型安全版本。它将保证您将在集合中获得相同的对象类型。
【讨论】:
显然我在这里不是指类型安全以上是关于ArrayList 与 List<object>的主要内容,如果未能解决你的问题,请参考以下文章
list.clear() 与 list = new ArrayList<Integer>(); [复制]
JAVA这样的定义:Collection<String>n=new ArrayList<String>()与List<String>n=new ArrayList(