Сравнение общего списка с массивом

Почему generic.list медленнее, чем массив?

грамматика? Ваш вопрос как таковой едва ли можно понять.

Joel Coehoorn 06.11.2008 20:24

Наверное, нужно дать расслабиться тем, кто не говорит по-английски.

Lance Roberts 06.11.2008 20:26

Как еще можно улучшить английский, если им никто не скажет, когда он особенно плох?

Joel Coehoorn 06.11.2008 20:28

Хороший момент, я думаю, что редактирование вопроса для удобства чтения, вероятно, поможет больше всего.

Lance Roberts 06.11.2008 20:28

Дать расслабиться? Для использования Y? Ну давай же.

Alan 06.11.2008 20:29

для справки: был по крайней мере один голос против, но это был не я.

Joel Coehoorn 06.11.2008 20:29

@Joel: я тоже :) В конце концов, это сайт программирования. Тем не менее, моя готовность терпеть нулевые усилия, ожидая, что другие ответят на 100%, намного ниже, чем раньше ...

Alan 06.11.2008 20:34

Было бы здорово, если бы вы дали определение «медленнее». Существует слишком много операций, которые можно выполнить как со списком, так и с массивом, чтобы мы могли интерпретировать то, что вы имеете в виду под словом «медленнее».

JaredPar 06.11.2008 20:36

@ Джоэл, я научился никогда не предполагать, кто голосовал каким образом, поскольку меня обвинили в отрицательном голосовании, хотя я тоже этого не сделал (хотя я и поддержал твой ответ).

Lance Roberts 06.11.2008 20:56

1. В .NET нет сущности под названием "generic.list". Может ты имел ввиду "Список <T>"? 2. Какую операцию вы пытаетесь сделать? 3. Какие измерения вы выполнили, чтобы прийти к своему заключению?

Jay Bazuzi 06.11.2008 21:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
10
1 501
2

Ответы 2

Общий список немного медленнее, чем массив, но в большинстве случаев вы этого не заметите. В основном это связано с более сложным поиском: говорят, что List использует массив «под капотом», но не гарантируется, что узлы в соседней памяти будут храниться так же, как в массиве.

Тем не менее, я видел некоторые тесты еще в 2005 году (сейчас не могу найти ссылку), и разница очень небольшая.

Кроме того, список имеет ряд важных преимуществ по сравнению с массивом: в основном это тривиальное добавление или удаление элементов. Гораздо проще использовать список, если вы не знаете, сколько элементов вам понадобится или когда это количество будет отличаться. В этих случаях (и, честно говоря, это большую часть времени), вам, вероятно, следует использовать массив нет.

хороший ответ, раз у вас достаточно очков, возможно, вы могли бы отредактировать вопрос.

Lance Roberts 06.11.2008 20:28

Я не совсем понимал, каков был исходный смысл. Да, я знаю, что это кажется странным, поскольку я дал ответ, но предоставление потенциально неправильного ответа не уничтожит вопрос, как это сделало бы редактирование.

Joel Coehoorn 06.11.2008 20:31

Что ж, основной блок данных (массив) будет просто смежным, но согласен: он, вероятно, не является смежным с экземпляром List <T>.

Marc Gravell 07.11.2008 01:02

С точки зрения производительности чтения есть два фактора:

  • дополнительное разыменование (т.е. List<T> будет содержать поле T[] и должен разыменовать его)
  • он не может использовать некоторые оптимизации компилятора, которые существуют для T[] - например, устранение проверки границ во время циклов

Однако гораздо проще добавить к List<T>, в частности, потому что он сохраняет свободное пространство - то есть ему не нужно изменять размер / копировать весь массив только для того, чтобы добавить один элемент.

Другие вопросы по теме