Для чего используется класс arraylist c

от admin

Для чего используется класс arraylist c

Итак, класс ArrayList представляет коллекцию объектов. И если надо сохранить вместе разнотипные объекты — строки, числа и т.д., то данный класс как раз для этого подходит.

Основные методы класса:

int Add(object value) : добавляет в список объект value

void AddRange(ICollection col) : добавляет в список объекты коллекции col, которая представляет интерфейс ICollection — интерфейс, реализуемый коллекциями.

void Clear() : удаляет из списка все элементы

bool Contains(object value) : проверяет, содержится ли в списке объект value. Если содержится, возвращает true, иначе возвращает false

void CopyTo(Array array) : копирует текущий список в массив array.

ArrayList GetRange(int index, int count) : возвращает новый список ArrayList, который содержит count элементов текущего списка, начиная с индекса index

int IndexOf(object value) : возвращает индекс элемента value

void Insert(int index, object value) : вставляет в список по индексу index объект value

void InsertRange(int index, ICollection col) : вставляет в список начиная с индекса index коллекцию ICollection

int LastIndexOf(object value) : возвращает индекс последнего вхождения в списке объекта value

void Remove(object value) : удаляет из списка объект value

void RemoveAt(int index) : удаляет из списка элемент по индексу index

void RemoveRange(int index, int count) : удаляет из списка count элементов, начиная с индекса index

void Reverse() : переворачивает список

void SetRange(int index, ICollection col) : копирует в список элементы коллекции col, начиная с индекса index

void Sort() : сортирует коллекцию

Кроме того, с помощью свойства Count можно получить количество элементов в списке.

Посмотрим применение класса на примере.

Во-первых, так как класс ArrayList находится в пространстве имен System.Collections, то подключаем его ( using System.Collections; ).

Вначале создаем объект коллекции через конструктор как объект любого другого класса: ArrayList list = new ArrayList(); . При необходимости мы могли бы так же, как и с массивами, выполнить начальную инициализацию коллекции, например, ArrayList list = new ArrayList()<1, 2, 5, "string", 7.7>;

Далее последовательно добавляем разные значения. Данный класс коллекции, как и большинство других коллекций, имеет два способа добавления: одиночного объекта через метод Add и набора объектов, например, массива или другой коллекции через метод AddRange

Через цикл foreach мы можем пройтись по всем объектам списка. И поскольку данная коллекция хранит разнородные объекты, а не только числа или строки, то в качестве типа перебираемых объектов выбран тип object: foreach (object o in list)

Многие коллекции, в том числе и ArrayList, реализуют удаление с помощью методов Remove/RemoveAt. В данном случае мы удаляем первый элемент, передавая в метод RemoveAt индекс удаляемого элемента.

В завершении мы опять же выводим элементы коллекции на экран только уже через цикл for. В данном случае с перебором коллекций дело обстоит также, как и с массивами. А число элементов коллекции мы можем получить через свойство Count

С помощью индексатора мы можем получить по индексу элемент коллекции так же, как и в массивах: object firstObj = list[0];

Класс ArrayList

В классе ArrayList поддерживаются динамические массивы, расширяющиеся и сокращающиеся по мере необходимости. В языке C# стандартные массивы имеют фиксированную длину, которая не может изменяться во время выполнения программы. Это означает, что количество элементов в массиве нужно знать заранее. Но иногда требуемая конкретная длина массива остается неизвестной до самого момента выполнения программы. Именно для таких ситуаций и предназначен класс ArrayList. В классе ArrayList определяется массив переменной длины, который состоит из ссылок на объекты и может динамически увеличивать и уменьшать свой размер.

Массив типа ArrayList создается с первоначальным размером. Если этот размер превышается, то массив автоматически расширяется. А при удалении объектов из такого массива он автоматически сокращается. Коллекции класса ArrayList широко применяются в практике программирования на C#. Многие способы применения коллекций класса ArrayList распространяются и на другие коллекции, в том числе и на обобщенные. В классе ArrayList реализуются интерфейсы ICollection, IList, IEnumerable и ICloneable. Ниже приведены конструкторы класса ArrayList:

Первый конструктор создает пустую коллекцию класса ArrayList с нулевой первоначальной емкостью. Второй конструктор создает коллекцию типа ArrayList с количеством инициализируемых элементов, которое определяется параметром c и равно первоначальной емкости массива. Третий конструктор создает коллекцию, имеющую указанную первоначальную емкость, определяемую параметром capacity. В данном случае емкость обозначает размер базового массива, используемого для хранения элементов коллекции. Емкость коллекции типа ArrayList может увеличиваться автоматически по мере добавления в нее элементов.

В классе ArrayList определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Коллекцию класса ArrayList можно отсортировать, вызвав метод Sort(). В этом случае поиск в отсортированной коллекции с помощью метода BinarySearch() становится еще более эффективным. Содержимое коллекции типа ArrayList можно также обратить, вызвав метод Reverse(). Некоторые из наиболее часто используемых методов класса ArrayList перечислены ниже:

AddRange()

Добавляет элементы из коллекции в конец вызывающей коллекции типа ArrayList

BinarySearch()

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

СоруТо()

Копирует содержимое вызывающей коллекции в массив, который должен быть одномерным и совместимым по типу с элементами коллекции

FixedSize()

Заключает коллекцию в оболочку типа ArrayList с фиксированным размером и возвращает результат. Возвращает часть вызывающей коллекции типа ArrayList. Часть возвращаемой коллекции начинается с элемента, указываемого по индексу, и включает количество элементов, определяемое параметром count. Возвращаемый объект ссылается на те же элементы, что и вызывающий объект.

IndexOf()

Возвращает индекс первого вхождения объекта в вызывающей коллекции. Если искомый объект не обнаружен, возвращает значение -1

InsertRange()

Вставляет элементы коллекции в вызывающую коллекцию, начиная с элемента, указываемого по индексу

Readonly()

Заключает коллекцию в оболочку типа ArrayList, доступную только для чтения, и возвращает результат

RemoveRange()

Удаляет часть вызывающей коллекции, начиная с элемента, указываемого по индексу index, и включая количество элементов, определяемое параметром count

Sort()

Сортирует вызывающую коллекцию по нарастающей

В классе ArrayList поддерживается также ряд методов, оперирующих элементами коллекции в заданных пределах. Так, в одну коллекцию типа ArrayList можно вставить другую коллекцию, вызвав метод InsertRange(). Для удаления из коллекции элементов в заданных пределах достаточно вызвать метод RemoveRange(). А для перезаписи элементов коллекции типа ArrayList в заданных пределах элементами из другой коллекции служит метод SetRange(). И наконец, элементы коллекции можно сортировать или искать в заданных пределах, а не во всей коллекции.

По умолчанию коллекция типа ArrayList не синхронизирована. Для получения синхронизированной оболочки, в которую заключается коллекция, вызывается метод Synchronized().

В классе ArrayList имеется также приведенное ниже свойство Capacity, помимо свойств, определенных в интерфейсах, которые в нем реализуются:

Свойство Capacity позволяет получать и устанавливать емкость вызывающей коллекции типа ArrayList. Емкость обозначает количество элементов, которые может содержать коллекция типа ArrayList до ее вынужденного расширения. Как упоминалось выше, коллекция типа ArrayList расширяется автоматически, и поэтому задавать ее емкость вручную необязательно. Но из соображений эффективности это иногда можно сделать, если количество элементов коллекции известно заранее. Благодаря этому исключаются издержки на выделение дополнительной памяти.

С другой стороны, если требуется сократить размер базового массива коллекции типа ArrayList, то для этой цели достаточно установить меньшее значение свойства Capacity. Но это значение не должно быть меньше значения свойства Count. Напомним, что свойство Count определено в интерфейсе ICollection и содержит количество объектов, хранящихся в коллекции на данный момент. Всякая попытка установить значение свойства Capacity меньше значения свойства Count приводит к генерированию исключения ArgumentOutOfRangeException. Поэтому для получения такого количества элементов коллекции типа ArrayList, которое содержится в ней на данный момент, следует установить значение свойства Capacity равным значению свойства Count. Для этой цели можно также вызвать метод TrimToSize().

Давайте рассмотрим пример использования некоторых методов класса ArrayList:

Класс ArrayList

Чтобы подключить необобщенную коллекцию нужно в тексте программы указать:

2. Какие интерфейсы реализуются в классе ArrayList ?

В классе ArrayList реализуются интерфейсы ICollection , IList , IEnumerable , ICloneable .

3. Как создать пустую коллекцию ArrayList ?

В данной строке создается пустая коллекция типа ArrayList с именем al :

4. Как создать коллекцию ArrayList емкостью 25 элементов?

5. Как добавить новый элемент в коллекцию ArrayList ?

Чтобы добавить новый элемент в коллекцию ArrayList нужно использовать метод Add() . В данном примере формируется динамический массив из 3-х элементов: [ 12 , 23 , 88 ].

Элементы, которые добавлены в коллекцию имеют тип object (рис. 1).

C# коллекция ArrayList рисунок

Рисунок 1. Тип элементов ArrayList

6. Как определить количество элементов массива типа ArrayList ? Свойство Count .

Для этого используется свойство Count .

Пример.

7. Как перевести массив типа ArrayList в массив целых чисел?

Пример демонстрации метода ToArray() из класса ArrayList .

В данном примере происходит преобразование массива al типа ArrayList в массив целых чисел ar . Также вычисляется сумма sum элементов массива ar .

8. Организация работы класса ArrayList со структурами на примере структуры типа КНИГА ( BOOK ).
8.1. Организация массива структур типа BOOK (книга). Метод Add() .

Пусть задана структура типа КНИГА :

Организовать динамический массив типа struct BOOK используя класс ArrayList .

Ответ:

8.2. Как перевести динамический массив ArrayList в массив структур? Демонстрация метода ToArray() из класса ArrayList для структуры типа BOOK ( КНИГА ).

В данном примере реализуется преобразование динамического массива al типа ArrayList в массив структур типа BOOK . Имя массива структур — ar .

8.3. Как определить количество элементов структуры типа BOOK ( КНИГА ) в массиве ArrayList ?

Пусть задана структура типа BOOK ( КНИГА ) с внесенными данными о двух книгах (см. п. 8.1). Чтобы определить количество внесенных книг, нужно использовать свойство Count .

9. Как удалить все элементы из массива типа ArrayList ? Свойство Clear() .

10. Как удалить заданный элемент из массива ArrayList ? Метод Remove() .

Пример 1. Удаление элемента 20 из массива ArrayList .

Команда Remove() удаляет первый элемент, который встретился с заданным значением. То есть, если в списке несколько элементов со значением 20, то удален будет только первый элемент.

Пример 2. Удаление нескольких элементов 20 из массива ArrayList .

11. Как скопировать в другую область памяти элемент типа ArrayList ? Метод Clone() .

Если выполнить присвоение двух объектов типа ArrayList , то они будут ссылаться на одну и ту же область памяти (рисунок 2).

Пример:

C# выделение память переменная

Рисунок 2. Переменные al и al2 указывают на общий участок памяти, который был выделен при описании переменной al

Читать:
Почему в блендере только объектный режим

Если нужно сделать копию из переменной al с одновременным выделением дополнительной памяти, то следует использовать метод Clone() . В этом случае переменные al и al2 указывают на разные участки памяти (рисунок 3).

alt=»C# копирование метод Clone() класс ArrayList» width=»377″ height=»103″ />Рисунок 3. Результат копирования методом Clone() класса ArrayList

12. Определение наличия элемента в массиве ArrayList . Метод Contains() .

Метод Contains() возвращает true , если заданный элемент есть в списке ArrayList . Иначе, метод возвращает false .

13. Как из массива ArrayList выбрать его часть? Метод GetRange() .

Метод GetRange () возвращает массив типа ArrayList , который есть подмножеством текущего массива ArrayList .

Пример.

14. Пример вычисления суммы элементов массива типа ArrayList .

В данном примере вычисляется сумма элементов массива ArrayList . Элементы массива приводятся к типу double .

15. Поиск позиции первого вхождения элемента в массиве ArrayList . Метод IndexOf() .

Для определения позиции первого вхождения заданного элемента в массиве ArrayList используется функция IndexOf() . Функция возвращает позицию первого вхождения. Если заданного элемента нет в массиве, то функция возвращает -1 .

Функция имеет три перегруженных варианта.

Пусть сформирован следующий массив.

Пример 1. Поиск позиции первого вхождения заданного элемента.

Пример 2. Поиск позиции начиная с заданного индекса до конца массива. Функция имеет два параметра. Первый параметр – искомый элемент. Второй параметр – позиция, с которой стартует поиск.

Пример 3. Поиск позиции заданного элемента. Функция имеет три параметра. Первый параметр – искомый элемент. Второй параметр – позиция, с которой стартует поиск. Третий параметр – количество символов, которые рассматриваются во время поиска.

16. Как вставить элемент в заданную позицию массива ArrayList ? Метод Insert() .

Метод Insert() предназначен для вставки элемента в заданную позицию. Метод имеет два параметра. Первый параметр – элемент, который вставляется. Второй параметр – позиция элемента.

Пример.

17. Как в массив ArrayList вставить другой массив из заданной позиции? Метод InsertRange() .

Метод InsertRange() разрешает вставлять подмассив в массив типа ArrayList . Метод получает два параметра. Первый параметр – позиция вставки. Второй параметр – массив, который вставляется.

Пример.

18. Определение последнего вхождения заданного элемента. Метод LastIndexOf() .

Метод LastIndexOf() находит позицию последнего вхождения элемента. Метод осуществляет поиск из конца к началу. Если элемент не найден, то метод возвращает -1 .

Метод имеет три перегруженных варианта.

Пример.

19. Как удалить элемент из массива ArrayList , что находится в заданной позиции? Метод RemoveAt() .

Чтобы в массиве ArrayList удалить элемент из заданной позиции нужно использовать метод RemoveAt() .

Пример.

20. Удаление диапазона значений, заданных индексами. Метод RemoveRange() .

Чтобы из массива ArrayList удалить несколько элементов заданных диапазоном, нужно использовать метод RemoveRange() . Метод принимает два параметра. Первый параметр – индекс, из которого начинается удаление. Второй параметр – количество символов, которые удаляются.

21. Реверс массива ArrayList . Функция Reverse() .

Функция Reverse() обертывает массив типа ArrayList в обратном порядке. Функция имеет два перегруженных варианта.

Пример 1. Использование функции Reverse() .

Пример 2. Функция Reverse() с двумя параметрами. Первый параметр – номер позиции, из которой осуществляется реверс. Второй параметр – количество элементов, который обрабатывается.

22. Копирование элементов массива ArrayList в другой массив. Метод SetRange() .

Метод SetRange( ) копирует элементы массива ArrayList в другой массив ArrayList , заменяя их.

Пример.

23. Как сортировать массив типа ArrayList ? Метод Sort() .

Метод Sort() сортирует элементы массива ArrayList используя реализацию интерфейса IComparable .

Пример.

24. Как скопировать данные из ArrayList в компонент ListBox ?

Пример 1.

Ниже приведен пример копирования данных из массива ArrayList в компонент ListBox для его отображения на форме.

Пример 2. Копирование структуры типа BOOK ( КНИГА ).

Урок 35. Коллекция ArrayList C#: часть первая

На этом уроке по C# и .NET мы поговорим об использование класса ArrayList. Этот класс коллекции общего назначения предоставляет возможность создавать и управлять группой связанных объектов, как если бы они были массивом переменной длины.

Коллекция ArrayList

При использовании одномерных массивов массив определяется с фиксированной длиной. Это может быть недостатком, если число элементов, которые будут храниться в массиве, является переменным и неизвестным до времени выполнения.

ArrayList — это коллекция общего назначения, предоставляемая платформой .NET framework. Он хранит набор объектов, который является гибким по размеру и включает в себя функциональные возможности для управления содержимым коллекции, в том числе возможность изменять диапазоны значений, выполнять операции сортировки и поиска содержимого ArrayList.

Реализованные интерфейсы коллекции

В предыдущей статье учебника по основам C# мы рассмотрели интерфейсы, используемые коллекциями. ArrayList реализует ICollection и IList; все свойства и методы, определенные этими интерфейсами, поддерживаются ArrayList. Эти модели поведения не рассматриваются в данной статье. Вместо этого мы рассмотрим дополнительное поведение, специфичное для ArrayLists.

Конструкторы

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

Класс ArrayList находится в пространстве имен System.Collections; таким образом, чтобы выполнить примеры, добавьте using System.Collections; к исходному коду.

Если максимальное число элементов, которые будут храниться в списке ArrayList, известно до создания коллекции, то его целесообразнее указать. Если этот размер недооценен и впоследствии будет превышен, вместимость все равно будет удвоена для размещения дополнительных предметов. Чтобы объявить начальную емкость ArrayList, введите значение в виде целого числа в конструкторе. Третий конструктор для ArrayList позволяет инициализировать все содержимое новой коллекции, используя данные любого другого массива или коллекции, которая поддерживает интерфейс ICollection. Массив или коллекция передается в качестве аргумента конструктору. Каждый элемент добавляется в новый ArrayList в том порядке, в котором они перечисляются из исходной коллекции. В следующем примере используется массив строк для инициализации ArrayList.

ArrayList.Repeat

Может быть полезно создать новую коллекцию ArrayList, предварительно заполненную несколькими экземплярами одного и того же значения или объекта. Статический метод Repeat обеспечивает эту функциональность:

Примечание: если ArrayList заполняется ссылочным типом с помощью Repeat, все элементы в коллекции будут ссылками на один и тот же объект, то есть изменение свойств одного элемента в коллекции создаст впечатление, что все другие элементы также изменились, поскольку они ссылаются на одни и те же данные. Этого не происходит при заполнении типами значений.

Изменение содержимого ArrayList

ArrayList разработан для обеспечения гибкой коллекции объектов типа массива. Он включает в себя множество методов, которые позволяют изменять его содержание. В следующих разделах описываются методы модификации, которые не были рассмотрены на предыдущем уроке.

Добавление нескольких элементов

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

Метод AddRange добавляет все содержимое коллекции в конец списка ArrayList. Объект ICollection, содержащий добавляемые элементы, передается как единственный параметр.

Метод InsertRange предоставляет аналогичную функцию для AddRange. Однако он требует дополнительного параметра для указания индекса, в который должны быть вставлены новые элементы. Существующие элементы в списке ArrayList перемещаются в более высокий индекс, чтобы разрешить вставку.

Удаление нескольких элементов

ArrayLists позволяют удалять диапазон элементов из коллекции в одной команде с помощью метода RemoveRange. RemoveRange принимает два параметра. Первый указывает индекс первого элемента, который будет удален. Второй параметр указывает количество одновременно удаляемых записей коллекции.

Замена нескольких элементов

Часто бывает полезно заменить содержимое части одного ArrayList на элементы из другого. Это можно сделать с помощью метода SetRange. SetRange требует двух параметров: индекс первого элемента для перезаписи и коллекция, которая будет использоваться для замены существующих записей из этой позиции вперед. Замещающие элементы должны находиться в массиве или коллекции на основе ICollection.

Реверс элементов ArrayList

Класс ArrayList предоставляет метод под названием Reverse(). В своей простейшей форме метод меняет порядок элементов в коллекции, как показано ниже:

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

Поиск по ArrayList

Поскольку ArrayList реализует IList, он поддерживает два стандартных метода запроса для списков: Contains и IndexOf. Метод ArrayList предоставляет дополнительные методы, которые можно использовать для поиска содержимого коллекции. Они описаны ниже.

Получение индекса записи

Метод IndexOf интерфейса IList выполняет поиск указанного объекта в коллекции и, если он найден, возвращает индекс первого совпадающего элемента. Эта функциональность расширена для ArrayLists с добавлением двух перегруженных версий метода.

Первая перегруженная версия IndexOf принимает дополнительный целочисленный аргумент, который задает позицию индекса, с которой должен начинаться поиск. Любые элементы с более меньшим исключаются из поиска. Это обеспечивает преимущество по сравнению с базовой версией метода в том, что несколько вхождений одного и того же значения могут быть легко обнаружены.

В следующем примере циклы выполняются до тех пор, пока не будет найдено каждое вхождение текста «Find me». Цикл завершается, когда значение индекса становится равным -1, что указывает на то, что объект поиска не был найден.

Второй перегруженный метод IndexOf добавляет второй целочисленный параметр. Второй параметр определяет размер диапазона для поиска в пределах ArrayList. Элементы, которые появляются в коллекции раньше, чем первый индекс или после окончания диапазона поиска, не сопоставляются.

Если вы хотите выполнить поиск в обратном направлении от конца ArrayList, используйте метод LastIndexOf Arraylist’а. Параметры, которые могут быть указаны, соответствуют параметрам метода IndexOf. Когда второй аргумент используется для указания размера диапазона, этот диапазон начинается с указанного последнего индекса и отсчитывается назад.


Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, си шарп, коллекции, уроки по си шарп, ArrayList

Похожие статьи