面试题答案
一键面试- 循环结构选择:
for
循环在已知循环次数的场景下通常性能较好,因为它的初始化、条件判断和迭代部分都很明确,编译器可以更好地进行优化。这里我们明确知道要遍历100万个元素,所以for
循环是一个不错的选择。foreach
循环在遍历集合时会创建一个枚举器,在处理大量数据时会有额外开销,相比之下for
循环更优。
- 变量作用域:
- 累加变量应该在循环外部声明,这样避免在每次循环时重复创建和销毁变量,减少额外开销。
- 缓存优化:
- 由于列表中的元素是固定的,在循环中每次获取列表元素时,编译器可能会进行边界检查等操作。可以提前获取列表的长度并缓存起来,避免在每次循环时都去获取列表的
Count
属性,因为获取属性值可能会有一些额外的开销。
- 由于列表中的元素是固定的,在循环中每次获取列表元素时,编译器可能会进行边界检查等操作。可以提前获取列表的长度并缓存起来,避免在每次循环时都去获取列表的
以下是具体实现代码:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int>();
for (int i = 0; i < 1000000; i++)
{
numbers.Add(i);
}
int sum = 0;
int count = numbers.Count;
for (int i = 0; i < count; i++)
{
if (numbers[i] % 3 == 0)
{
sum += numbers[i];
}
}
Console.WriteLine($"Sum of numbers divisible by 3: {sum}");
}
}