Вопрос по c#, arrays – Значительные различия в Array vs Array List? [Дубликат]

16

Possible Duplicate:
When to use ArrayList over array[] in c#?

С точки зрения затрат памяти или процессора, существует ли существенная разница между массивом и объектом arrayList?

Я подозреваю, что ArrayList будет медленнее, так как вы должны приводить каждый элемент в массиве при получении. Matthew
@NikhilAgrawal не является дубликатом этой темы, поскольку речь идет именно о различиях в производительности, а не в контексте использования. Asik

Ваш Ответ

2   ответа
1

Массив - это непрерывный блок памяти фиксированного размера, тогда как ArrayList (хотя вы должны предпочесть List, начиная с .NET 2.0), оборачивает массив, чтобы обеспечить динамически изменяемое хранилище.

«Разница» между ними то, что, поскольку они инкапсулированы, ArrayList имеет изменяемый размер, а массив не является. Что касается реализации: поскольку ArrayList оборачивает (и перераспределяет) массивы, ему потребуется чуть больше памяти, чем массиву (поскольку он должен знать текущее количество элементов, в отличие от его емкости), кроме того, ArrayList также требует времени ЦП для перераспределения и копирования своего внутреннего массива, если он когда-либо достигнет своей внутренней емкости.

Однако создание ArrayList не дороже, чем выделение массива. Единственное отличие состоит в том, что имеется несколько инструкций, необходимых для инициализации состояния ArrayList. Разница незначительна и не стоит беспокоиться.

Вы обнаружите, что если вы перераспределяете массив самостоятельно как средство создания коллекции с изменяемым размером, тогда вам лучше использовать ArrayList / List, так как он был тщательно протестирован.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Mike Olson
6

Массив - это низкоуровневая структура данных, которая по существу отображается в область памяти.ArrayList это список переменной длины, реализованный в виде массиваobject это перераспределяется по мере роста списка.

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

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

По факту,ArrayList практически устарела в пользуList<T> начиная с .NET 2.0.

Error: User Rate Limit Exceeded Mike Olson
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Mike Olson
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Mike Olson

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