2012-11-26 55 views
2

我被要求修改前一段时间为Windows窗体应用程序编写的代码。程序员大量使用了ArrayList。我认为通用列表比数组列表更有效,并计划使用List<T>来重写代码。我想知道是否还有其他可能值得考虑的替代方案。我工作.net 2.0System.Collections.ArrayList有哪些替代方法?

+0

arrayList是一个混合bag.you可以存储anything.a列表是强类型的,你只能存储单一类型的元素。什么类型的对象存储在你的旧列表 –

回答

4

如果你在.NET 2中工作,那么你将不会有.NET 4中的任何并发集合可供你使用,这几乎只留下了List<T>的“集合这有点像ArrayList(即使在并发集合,没有立即等效的 - 当你实际预期的并发访问反正你应该只使用并发集合)。

Stack<T>Queue<T>,如以及LinkedList<T> - 但所有这些都与ArrayList有些不同,你可以用它们做什么。当然,如果你不需要随机存取的话,这些值得考虑。

我不会期望效率太多,除非您目前在ArrayList中装箱了很多大型值类型。你可以可以预计是更清晰的代码。减少铸造次数,减少收集内容的不确定性等。

如果您可以在不久的将来随时升级到.NET 3.5,那么您就可以访问LINQ,这是非常棒的在处理集合时很有用。相对较少的新收集类型,但更简单的方式表达对它们的操作。

1

尝试SortedListCollection。 通过双方的.NET Framework 2.0

+3

'SortedList <,>'是一个键/值映射。 'Collection '旨在作为自定义集合的基类。我很少期望这些是当前正在使用'ArrayList'的合适替代方案。 –

2

更新支持:

对于添加到/从头/尾删除它是更好地使用LinkedList<T>,但如果你能确定集合的精确最大的容量和规模将接近容量,那么最好使用Queue<T>(因为内部是数组,在大小达到容量时重新分配)。通过队列,您不会得到LinkedList节点带来的内存开销。

原文: 从MSDN:The List<T> class is the generic equivalent of the ArrayList class. 请仔细阅读List<T>Performance Considerations部分。 你应该使用什么取决于如何使用ArrayList?是随机访问还是从头部/尾部添加/删除?

+0

它只是从头部/尾部添加/删除 –

+0

查看更新。队列的大小是队列中元素的实际数量。容量是内部为队列元素分配的数组大小,即重新分配内部数组之前元素的最大数量。 – mixel

相关问题