我被要求修改前一段时间为Windows窗体应用程序编写的代码。程序员大量使用ArrayList
。我认为通用列表与数组列表相比更有效,并计划使用List<T>
重写代码。我想知道是否还有其他可能值得考虑的替代方案。我在.net 2.0上工作
答案 0 :(得分:4)
如果您在.NET 2中工作,那么您将无法使用.NET 4中的任何并发集合,这几乎只会留下List<T>
的“集合”。有点像ArrayList
。(即使在并发集合中,也没有直接的等价物 - 你应该只在实际预期并发访问时才使用并发集合。)
有Stack<T>
和Queue<T>
以及LinkedList<T>
- 但就你可以用它们做什么而言,所有这些都与ArrayList
有所不同。如果你不需要随机访问,它们是值得考虑的。
除非您目前在ArrayList
中装入很多大值类型,否则我不会期望效率更多。您可以期望的是更清晰的代码。演员阵容减少,收藏内容的不确定性降低等等。
如果您可以选择在不久的将来随时升级到.NET 3.5,那么您将可以访问LINQ,这在处理集合时非常有用非常有用。相对较少的新集合类型,但更简单的表达操作的方式。
答案 1 :(得分:2)
<强>更新强>
对于添加到/从头部/尾部移除最好使用LinkedList<T>
,但如果您可以确定收集的确切最大容量,并且大小将接近容量,则可能最好使用{{1 (因为在内部它是数组,当大小达到容量时重新分配)。使用Queue,您将不会获得LinkedList节点带来的内存开销。
<强>原始强>
来自MSDN:Queue<T>
请仔细阅读The List<T> class is the generic equivalent of the ArrayList class.
Performance Considerations部分。
你应该使用什么取决于ArrayList的使用方式?是随机访问还是从头/尾添加/删除?
答案 2 :(得分:1)
尝试SortedList和Collection。 两者都受.NET Framework 2.0支持