Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Топ:
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Дисциплины:
2017-11-27 | 310 |
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();
}
Можно добавить пример самостоятельно
|
|
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!