Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Топ:
Оснащения врачебно-сестринской бригады.
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Интересное:
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Дисциплины:
2017-11-27 | 309 |
5.00
из
|
Заказать работу |
|
|
***Класс ArrayList
Основным недостатком обычных массивов является то, что объем памяти, необходимый для хранения их элементов, должен быть выделен до начала работы с массивом. Класс ArrayList позволяет программисту не заботиться о выделении памяти и хранить в одном и том же массиве элементы различных типов.
По умолчанию при создании объекта типа ArrayList строится массив из 16 элементов типа object. Можно задать желаемое количество элементов в массиве, передав его вконструктор или установив в качестве значения свойства Capacity, например:
ArrayListarr1 = newArrayList(); // создается массив из 16 элементов
ArrayListarr2 = newArrayList(1000); // создается массив из 1000 элементов
ArrayList аггЗ = newArrayList();
аггЗ.Capacity = 1000; // количество элементов задается
Класс ArrayList имеет множество полезных для разработчика методов и свойств, например:
· Capacity – свойство, связано с емкостью массива (количество элементов, которые могут храниться в массиве);
· Count – свойство, фактическое количество элементов массива;
· Item – свойство, получает или устанавливает значение элемента по заданному индексу;
· Add – метод, добавление элемента в конец массива;
· Clear – метод, удаление всех элементов из массива;
· IndexOf- метод, поиск первого вхождения элемента в массив (возвращает индекс найденного элемента или -1, если элемент не найден).
· Insert – метод, вставка элемента в заданную позицию (по заданному индексу);
· Reverse – метод, изменение порядка следования элементов на обратный;
· RemoveAt – метод, удаление элемента из массива по заданному индексу;
· Sort – метод, упорядочивание элементов массива или его части.
Класс ArrayList реализован через класс Array, то есть содержит закрытое поле этого класса. Поскольку все типы в С# являются потомками класса object, массивможет содержать элементы произвольного типа/Даже если в массиве хранятсяобычные целые числа, то есть элементы значимого типа, внутренний классявляется массивом ссылок на экземпляры типа, object, которые представляютсобой упакованный тип-значение. Соответственно, при занесении в массив выполняетсяупаковка, а при извлечении — распаковка элемента. Это не может не сказаться на быстродействии алгоритмов, использующих ArrayList.
|
Если при добавлении элемента в массив оказывается, что фактическое количество элементов массива превышает его емкость, она автоматически удваивается, тоесть происходит повторное выделение памяти и переписывание туда всех существующихэлементов.
Пример занесения элементов в экземпляр класса ArrayList:
arr1.Add(123);
arr1.Add(-2);
arr1.Add("Вася");
Доступ к элементу выполняется по индексу, однако при этом необходимо явным образом привести полученную ссылку к целевому типу, например:
int a = (int) arrl[0];
int b = (int) arrl[l];
string s - (string) arrl[2]:
Попытка приведения к типу, не соответствующему хранимому в элементе, вызываетгенерацию исключения InvalidCastException.;
Для повышения надежности программ применяется следующий прием: экземпляр класса ArrayList объявляется закрытымполем класса, в котором необходимо хранить коллекцию значений определенного типа, а затем описываются методы работы с этой коллекцией, делегирующие свои функции методам ArrayList.
Недостатком этого решения является то, что для каждого метода стандартной коллекции приходится описывать метод-оболочку, вызывающий стандартный метод. Хотя это и несложно, но несколько неизящно. ВС#, начиная с версии 2.0, появились классы-прототипы (generics), позволяющие решить эту проблему.
***Класс List
Многие алгоритмы не зависят от типов данных, с которыми они работают. Простейшими примерами могут служить сортировка и поиск. Возможность отделить алгоритмы от типов данных предоставляет классы-прототипы (generics) — классы, имеющие в качестве параметров типы данных. Чаще всего эти классы применяются для хранения данных, то есть в качестве контейнерных классов, или коллекций.
|
Эти коллекции, расположенные в пространстве имен System.Collections.Generic, дублируют аналогичные коллекции пространства имен System.Collections.
List<T>является классом прототипом класса ArrayList.В отличии от своего предка List<T>хранит элементы одного типа или класса и производных от него классов, это делает его универсальным.
Казалось бы, по сравнению с обычными коллекциями это ограничение, а не универсальность, однако на практике коллекции, в которых действительно требуется хранить значения различных, не связанных межу собой типов, почти не используются.Достоинством же такого ограничения является то, что компилятор может выполнить контроль типов во время компиляции, а не выполнения программы,что повышает ее надежность и упрощает поиск ошибок.
В остальном он подобен своему предку.
----Отличием же от класса Array, является более широкий набор методов и свойств, однако все равно есть и недостатки, а именно невозможность задать нижнюю границу массива, возможность создать только одномерный массив с помощью классов Listи ArrayList.
Последняя проблема решается посредством создания массивов-списков. Это можно сделать следующим образом, с использованием класса Array:
List<int>[] lst = new List<int>[9];
Тут мы объявляем массив типа List<int>из 9 элементов и далее в цикле инициализируем каждый элемент массива списком:
for (int i = 0; i < 9; i++)
{
lst[i] = new List<int>() {};
}
Далее обращаться к такому массиву списку мы можем средством цикла foreach, например:
foreach (List<int> sp in lst)
{
foreach (int i in sp) Console.Write(i + " ");
Console.WriteLine();
}
Можно добавить пример самостоятельно
|
|
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!