数组vs.list性能问题

可能重复:
arrays与列表的性能

我想知道哪一个是更好的方法来完成这项任务。

string[] week = new string[7] week[0] = "Sunday"; week[1] = "Monday"; week[2] = "Tuesday"; foreach (string day in week) { //Some task } 

 List week = new List(); list.Add("Sunday"); list.Add("Monday"); list.Add("Tuesday"); foreach (string day in list) { //Some Task } 

是否有任何性能问题?或任何其他更好的方法。谢谢。

第一个可能表现更好,但只是如此轻微。 原因是即使列表后面有一个数组,列表上的迭代也需要经过几层方法调用来获取值,而数组几乎是直接内存寻址。 差异将是如此之小,以至于您必须迭代数千次来测量它。 这就是所谓的微优化 ,通常被认为是浪费精力。

如果您总是在数组中添加相同的内容,请使用以下语法:

 String [] week = new String [] { "Sunday", "Monday", ... }; 

该arrays效率更高,列表可能最终会调整自身大小。

我想知道哪一个是更好的方法来完成这项任务

与编程一样,没有知识的人会寻找一个简单的解决方案。 空无一人。 看,有一个性能差异,它与任务给出的完全无关(数据太少)。

通常,数组更快但与其他元素有严重问题 – 插入/删除速度很慢,因为所有元素都必须复制到新数组。

List没有复制问题,但每个条目都是一个节点,意味着更多的内存使用和更多的内存访问 – 每个条目都是你的对象+一个节点对象,指针来回到下一个/最后一个元素。 这使得随机访问变慢,有时甚至是如此。 如果你只做foreach,这不是问题,特别是只有7个元素。 如果您有250,000个项目列表的数千次访问,那么它会更多。

学习编程的一部分是理解列表中每个项目的标准特征。 上面的问题是一个实习生级别的初学者问题 – 我喜欢在程序员访谈中使用这个问题来淘汰那些想要的人。