Коллекция ArrayList

 

Проблема статического создания массива решается при помощи использования другого класа данных языка С#. В пространстве имен System.Collections имеется встроенный класс с названием ArrayList. Если мы объявляем объект этого класса, мы получаем массив, который в большинстве отношений функционирует как простой массив, но может расти, если его начальный или текущий размер оказывается недостаточным. Поэтому можно объявить:

Using System.Collections;

ArrayList constant = new constants(100);

и если число объектов превысит 100, это не будет иметь никакого значе­ния. Массив будет расширен системой насколько нужно и как только в этом возникнет необходимость. Число, указываемое в предложении, которое со­здает начальный список, является лишь оценкой ожидаемого размера массива.

В таблице 1 приведены свойства и методы класса ArrayList.

 

Таблица 1 – свойства и методы класса ArrayList

int count возвращает число занятых элементов в списке
int BinarySearch(v) просматривают список в поисках значения v, ища любое вхождение, требует упорядоченного массива
bool Contains(v) просматривают список в поисках значения v,ища любое вхождение, возвращает true или false
void Clear(first, num) удаляет из списка все элементы
int IndexOf(v) просматривают список в поисках значения v, ища первое вхождение
int LastIndexOf(v) просматривают список в поисках значения v, ища последнее вхождение
void removeAt(i) удаляет элемент с индексом /.
void Sort() упорядочивает массив а, так что его элементы выстраиваются в возрастающем порядке.
void Array ToArray(type) копирует элементы в массив данного типа

 

К сожалению, ArrayList также имеет свои недостатки. По сравнению с массивами коллекции ArrayList работают гораздо медленнее и занимают больше оперативной памяти. Происходит это из-за особенностей коллекций, которые, собственно, и создают удобство их использование (возможность добавлять и удалять элементы из середины коллекции). Если вы создаёте массив, то его размер будет равен количеству элементов массива помноженному на размер каждого элемента. Например, для массива с 10 элементами типа Integer выделяется 10*4=40 байт. Затем для считывания элемента массива вычисляется его положение в памяти на основании номера элемента и размера элементов и затем считывается нужный участок памяти. С коллекциями всё иначе. Каждый элемент коллекции представлен не одной переменной, содержащей его значение, а структурой данных. Она содержит указатель на данные элемента, ссылки на предыдущий и следующий элемент коллекции. Естественно, такая структура будет занимать больше пространства в оперативной памяти, чем одна единственная переменная. Доступ к данным в коллекции также организуется по-особому. Для получения, например, пятого элемента, коллекция перебирает все элементы, начиная с первого, пока не дойдёт до нужного индекса