Какой из них более эффективен: List <int> или int []
Может ли кто-нибудь сказать мне, какая из них более эффективна между List<int>
и int[]
. Потому что я работаю над проектом, и, как вы, возможно, знаете, эффективность настолько важна сейчас.
Если вы добавили некоторые вводные заметки на свой пост, было бы замечательно:)
Ответы
Ответ 1
(list should be resizable) ? List<int> : int[]
List<int>
- это оболочка для int[]
, которая по мере необходимости изменяет размеры. С JIT-inlining они должны выполняться почти одинаково, но JIT будет иметь более легкое время, выходящее за дополнительную производительность от int[]
, потому что это примитив CLI с выделенными инструкциями IL.
Ответ 2
Просто для удовольствия, я побежал это:
int cap = 100000;
Stopwatch sw1 = new Stopwatch();
sw1.Start();
int[] ix = new int[cap];
for (int x = 0; x < cap; x++)
{
ix[x] = 1;
}
sw1.Stop();
Stopwatch sw2 = new Stopwatch();
sw2.Start();
List<int> iy = new List<int>(cap);
for (int y = 0; y < cap; y++)
{
iy.Add(y);
}
sw2.Stop();
Console.WriteLine(cap.ToString() + " int[]=" + sw1.ElapsedTicks.ToString());
Console.WriteLine(cap.ToString() + " List<int>=" + sw2.ElapsedTicks.ToString());
Console.ReadKey();
И получил следующее:
100000 int[]=1796542
100000 List=2517922
Я пробовал это в истекшие миллисекунды и получил 0 и 1 соответственно. Ясно, что int [] быстрее, но если вы не говорите о огромных массивах, я бы сказал, что это просто номинально.
Ответ 3
Если вы точно знаете, сколько элементов будет в коллекции, и не нужны какие-либо дополнительные функции List<int>
AND (это очень серьезная И) производительность - это серьезную озабоченность, идите с int[]
. Иначе придерживайтесь List<int>
.
Ответ 4
последний эффективнее.
В исходном коде List<>
указан некоторыми массивами.
Например, List<Type> aa=new List<Type>();
В общем случае объявляется array Type[]
, длина которого является определенным числом.
Другими словами, если вы объявите List<>
, большое пространство уже использовалось.
Если элемент List<>'s
не соответствует длине, массив должен быть скопирован в другой.
Поэтому лучше не использовать List<>
.
Лучший способ использования - объявить его длину.
Список aa=new List<Type>(10);
Ответ 5
Список использует массив внутри, поэтому использование массива (правильно) всегда будет более эффективным (или, по крайней мере, как) эффективным.
Ответ 6
Если вы планируете использовать любые функции, которые предоставил список (поиск, сортировка, удаление, изменение размера), я бы пошел со списком, потому что, скорее всего, эти функции уже очень оптимизированы, и вы не сможете писать лучше их версий.