Значительные различия в массиве и массиве?

Возможный дубликат:
Когда использовать ArrayList над массивом [] в С#?

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

Ответ 1

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

В.NET Visual Studio использует специальный класс для хранения данных. Из-за этого производительность на самом деле довольно быстро. Это также потому, что в массиве вам нужно указать размер и, следовательно, данные сохраняются один за другим.

Примеры:

int[] myNumbers= new int[5];
myNumbers[0] = 16;

ArrayList (пространство имен System.Collections) представляет собой набор данных. Чтобы заполнить ArrayList, можно использовать метод.Add. ArrayLists очень динамичны в том смысле, что когда вы добавляете и/или удаляете элементы из него, функция остается неизменной.

Внутренняя структура массива ArrayList представляет собой массив.

Примеры:

ArrayList myArray = new ArrayList();
myArray.Add("Steph");
string str = myArray[0];

В большинстве случаев мы склонны выбирать списки массивов, а не массивы, так как мы не представляем, насколько велика будет. Массивы идеальны, когда вы знаете, сколько предметов вы собираетесь вставить. По возможности рекомендуется использовать массивы, так как это значительно улучшает производительность.

Массив - это последовательность однородных данных, а ArrayList - последовательность гетерогенных данных. Вот почему мы должны выводить все данные в ArrayLists.

Массивы многомерны, но ArrayList всегда одномерен.

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

ArrayLists не строго типизированы, для каждой вставки или для Retrial вам потребуется бросок, чтобы вернуться к исходному типу. Если вам нужен метод для получения списка определенного типа, ArrayLists не подходят, потому что вы можете передать ArrayList, содержащий любой тип. ArrayLists используют динамически расширяющийся массив внутри, поэтому есть также шанс расширить размер внутреннего массива, когда он достигнет своей емкости.

Ответ 2

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

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

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

Фактически, ArrayList практически не рекомендуется в отношении List<T> с.NET 2.0.

Ответ 3

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

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

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

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