Коллекции arraylist в си шарп

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

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

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

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

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

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

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

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

ArrayList myCollection = new ArrayList();

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

ArrayList myCollection = new ArrayList(5);

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

string[] fruitArray = new string[] ; ArrayList fruitCollection = new ArrayList(fruitArray); // Список предметов коллекции foreach (string fruit in fruitCollection) < Console.WriteLine(fruit); >/* Вывод Apple Banana Grape */

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

ArrayList myCollection = ArrayList.Repeat("upread.ru",5); foreach (string s in myCollection) < Console.WriteLine(s); >/* Вывод upread.ru upread.ru upread.ru upread.ru upread.ru */

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

Читайте также:  Html center footer text

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

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

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

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

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

ArrayList myCollection = ArrayList.Repeat("Item",3); ArrayList extraItems = ArrayList.Repeat("Extra",2); myCollection.AddRange(extraItems); foreach (string s in myCollection) < Console.WriteLine(s); >/* Вывод Item Item Item Extra Extra */

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

ArrayList myCollection = ArrayList.Repeat("Item",3); ArrayList extraItems = ArrayList.Repeat("Extra",2); myCollection.InsertRange(1,extraItems); foreach (string s in myCollection) < Console.WriteLine(s); >/* вывод Item Extra Extra Item Item */

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

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

ArrayList myCollection = ArrayList.Repeat("Item",5); // удаление трех элементов из ArrayList начиная с первого myCollection.RemoveRange(0,3); foreach (string s in myCollection) < Console.WriteLine(s); >/* вывод Item Item */

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

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

ArrayList myCollection = ArrayList.Repeat("Item",5); ArrayList newItems = ArrayList.Repeat("New",2); // перезапись myCollection.SetRange(1,newItems); foreach (string s in myCollection) < Console.WriteLine(s); >/* вывод Item New New Item Item */

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

Читайте также:  Maven узнать версию java

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

ArrayList myCollection = new ArrayList( new string[] ); myCollection.Reverse(); foreach (string s in myCollection) < Console.WriteLine(s); >/* вывод Five Four Three Two One */

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

ArrayList myCollection = new ArrayList( new string[] ); myCollection.Reverse(1,3); foreach (string s in myCollection) < Console.WriteLine(s); >/* вывод One Four Three Two Five */

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

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

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

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

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

ArrayList myCollection = new ArrayList( new string[] ); int location = -1; do < location = myCollection.IndexOf("Find Me", location + 1); if (location != -1) < Console.WriteLine("Found at index ", location); > > while (location != -1); /* вывод Found at index 2 Found at index 4 Found at index 6 */

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

ArrayList myCollection = new ArrayList( new string[] ); Console.WriteLine(myCollection.IndexOf("One",1,3)); // -1 Console.WriteLine(myCollection.IndexOf("Three",1,3)); // 2 Console.WriteLine(myCollection.IndexOf("Five",1,3)); // -1

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

ArrayList myCollection = new ArrayList( new string[] ); Console.WriteLine(myCollection.LastIndexOf("One")); // 0 Console.WriteLine(myCollection.LastIndexOf("One",3,3)); // -1

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

Читайте также:  Подсчитать количество символов строке php

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

Источник

Оцените статью