c# выстраивают по сравнению с универсальным списком [дубликат]

Этот вопрос уже имеет ответ здесь:

я в основном хочу знать различия или преимущества в использовании универсального списка вместо массива в ниже упомянутого сценария

class Employee
{
    private string _empName;

    public string EmpName
    {
       get{ return _empName; }
       set{ _empName = value; }
    }
}

1. Employee[] emp 
2. List emp

кто-либо может сказать мне преимущества или недостатки и который предпочесть?

32
задан Wallace Kelly 14 June 2012 в 03:38
поделиться

7 ответов

Вам необходимо знать размер массива на момент его создания, но вы не можете изменить его размер после того, как он был создан.

Таким образом, он использует динамическое выделение памяти для массива во время создания. (Это отличается от статического распределения памяти, используемого для массивов C ++, где размер должен быть известен во время компиляции.)

Список может динамически расти ПОСЛЕ того, как он был создан, и он имеет .Add () для этого.

-из MSDN

  1. Generics Vs Array Lists-SO Общее сравнение.
  2. Общий список или массивы-SO Почему общий список медленнее, чем массив?

Какой из них предпочесть? Список .

2
ответ дан 27 November 2019 в 20:57
поделиться

Если вы знаете, количество элементов массива - хороший выбор. Если нет, воспользуйтесь списком. Внутри List использует массив T, поэтому они на самом деле больше похожи, чем вы думаете.

1
ответ дан 27 November 2019 в 20:57
поделиться

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

1
ответ дан 27 November 2019 в 20:57
поделиться

Самая большая разница в том, что массивы нельзя делать длиннее или короче после их создания. Однако экземпляры списка могут содержать добавленные или удаленные элементы. Есть и другие различия (например, доступны разные наборы методов), но добавление / удаление - это большая разница.

Мне нравится List, если нет действительно веской причины использовать Array, так как гибкость List хороша, а штраф за производительность очень мал по сравнению со стоимостью большинства других вещей, которые обычно делает ваш код.

Если вы хотите погрузиться во многие интересные технические подробности, ознакомьтесь с этой веткой StackOverflow , в которой подробно рассказывается о List vs.Задайте более подробный вопрос.

15
ответ дан 27 November 2019 в 20:57
поделиться

С помощью общего списка вы можете дешево Добавить / Удалить и т. Д. (По крайней мере, на дальнем конце). Изменение размера массива (добавление / удаление) дороже. Очевидным недостатком является то, что у списка есть свободная емкость, поэтому, возможно, несколько байтов тратятся впустую - хотя в большинстве случаев не стоит беспокоиться (и вы можете обрезать его).

Как правило, предпочитайте списки, если вы не знаете , что ваши данные никогда не меняют размер.

С точки зрения API, поскольку LINQ практически не имеет выбора между ними (т.е. дополнительные методы в List в значительной степени дублируются LINQ, поэтому массивы получают их бесплатно).

Еще одно преимущество состоит в том, что со списком вам не нужно открывать сеттер:

private readonly List<Foo> items = new List<Foo>();
public List<Foo> Items { get { return items; } }

устраняет диапазон ошибок null и позволяет вам сохранять контроль над данными (особенно если вы используете другая реализация IList <> , которая поддерживает проверку / проверку при изменении содержимого).

7
ответ дан 27 November 2019 в 20:57
поделиться

Если вы открываете коллекцию в общедоступном интерфейсе, в рекомендациях .NET Framework рекомендуется использовать список, а не T []. (Фактически, BindingList )

Внутренне массив может быть более подходящим, если у вас есть коллекция фиксированного известного размера. Изменение размера массива дорого по сравнению с добавлением элемента в конец списка.

2
ответ дан 27 November 2019 в 20:57
поделиться

Одно большое отличие состоит в том, что List может быть расширен (вы можете позвонить Добавить) или по контракту (для него можно вызвать Remove), тогда как Employee [] имеет фиксированный размер. Таким образом, с Сотрудником [] труднее работать, если этого не требует необходимость.

20
ответ дан 27 November 2019 в 20:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: