Для чего используется класс arraylist c
Перейти к содержимому

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

  • автор:

Для чего используется класс 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 можно получить количество элементов в списке.

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

using System; using System.Collections; namespace Collections < class Program < static void Main(string[] args) < ArrayList list = new ArrayList(); list.Add(2.3); // заносим в список объект типа double list.Add(55); // заносим в список объект типа int list.AddRange(new string[] < "Hello", "world" >); // заносим в список строковый массив // перебор значений foreach (object o in list) < Console.WriteLine(o); >// удаляем первый элемент list.RemoveAt(0); // переворачиваем список list.Reverse(); // получение элемента по индексу Console.WriteLine(list[0]); // перебор значений for (int i = 0; i < list.Count; i++) < Console.WriteLine(list[i]); >Console.ReadLine(); > > >

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

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

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

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

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

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

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

Урок 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 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, предварительно заполненную несколькими экземплярами одного и того же значения или объекта. Статический метод 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, все элементы в коллекции будут ссылками на один и тот же объект, то есть изменение свойств одного элемента в коллекции создаст впечатление, что все другие элементы также изменились, поскольку они ссылаются на одни и те же данные. Этого не происходит при заполнении типами значений.

Изменение содержимого 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

Класс 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

Поскольку 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 — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

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

Класс ArrayList

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

using System.Collections;

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

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

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

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

ArrayList al = new ArrayList();

4. Как создать коллекцию ArrayList емкостью 25 элементов?
ArrayList al = new ArrayList(25);

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

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

al.Add(12); // добавляет число 12 к динамическому массиву al.Add(23); // добавляет число 23 к динамическому массиву al.Add(88); // добавляет число 88 к динамическому массиву

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

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

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

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

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

Пример.

ArrayList al = new ArrayList(); al.Add(10); al.Add(20); al.Add(30); // количество элементов  int n; n = al.Count; // n = 3

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

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

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

ArrayList al = new ArrayList(); // добавить три числа к динамическому массиву al.Add(10); al.Add(20); al.Add(30); int sum = 0; // преобразование массива al в массив целых чисел ar int[] ar = (int[])al.ToArray(typeof(int)); // нахождение суммы for (int i = 0; i < ar.Length; i++)  sum += ar[i]; > label1.Text = sum.ToString(); // вывод значения суммы на форму

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

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

struct BOOK   public string Author;  public string Title;  public int year;  public double price; >;

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

Ответ:

// создать первую книгу BOOK b1 = new BOOK(); ArrayList al = new ArrayList(); b1.Author = "Author-1"; b1.Title = "Title-1"; b1.year = 1998; b1.price = 90.95; al.Add(b1); // добавить книгу в массив // создать вторую книгу b1.Author = "Author-02"; b1.Title = "Title-02"; b1.year = 1980; b1.price = 130.94; al.Add(b1); // добавить книгу в массив

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

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

BOOK[] ar = (BOOK[])al.ToArray(typeof(BOOK));

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

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

int n; n = al.Count; // n = 2

9. Как удалить все элементы из массива типа ArrayList ? Свойство Clear() .
ArrayList al = new ArrayList(); al.Add(10); // добавить числа к массиву al al.Add(20); al.Add(30); // удалить все элементы из массива al.Clear(); // al.Count = 0

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

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

ArrayList al = new ArrayList(); al.Add(10); // добавить три числа al.Add(20); al.Add(30); al.Remove(20); // удалили элемент со значением 20

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

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

ArrayList al = new ArrayList(); al.Add(10); al.Add(20); al.Add(30); al.Add(20); al.Add(20); // al = [10, 20, 30, 20, 20] al.Remove(20); // al = [10, 30, 20, 20] al.Remove(20); // al = [10, 30, 20]

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

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

Пример:

ArrayList al = new ArrayList(); ArrayList al2; al.Add(10); // добавляет число 10 к динамическому массиву al.Add(20); al.Add(30); al2 = al; // al2 = al = [10, 20, 30] - указывают на одну область памяти al2.Remove(20); // al = [10, 30]

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

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

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

ArrayList al = new ArrayList(); ArrayList al2; al.Add(10); al.Add(20); al.Add(30); al2 = (ArrayList)al.Clone(); al2.Remove(20); // al = [10, 20, 30]; al2 = [10, 30]

C# копирование метод Clone() класс ArrayList

Рисунок 3. Результат копирования методом Clone() класса ArrayList

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

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

ArrayList al = new ArrayList(); al.Add(25); al.Add(-18); al.Add(33); bool is_el; is_el = al.Contains(-18); // is_el = True is_el = al.Contains(50); // is_el = False

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

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

Пример.

ArrayList al = new ArrayList(); ArrayList al2; al.Add(0); al.Add(1); al.Add(2); al.Add(3); al.Add(4); al.Add(5); // al = [0, 1, 2, 3, 4, 5] al2 = al.GetRange(2, 3); // al2 = [2, 3, 4]

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

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

ArrayList al = new ArrayList(); double sum = 0; al.Add(0.6); al.Add(-10.45); al.Add(2.667); al.Add(300.78); for (int i = 0; i < al.Count; i++)  sum = sum + (double)al[i]; listBox1.Items.Add(al[i]); > label1.Text = sum.ToString(); // sum = 293.597

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

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

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

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

ArrayList al = new ArrayList(); int index; al.Add(10); al.Add(20); al.Add(30); al.Add(40); al.Add(50); al.Add(40); al.Add(30); // al = [10, 20, 30, 40, 50, 40, 30]

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

index = al.IndexOf(30); // index = 2

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

index = al.IndexOf(30, 3); // index = 6

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

index = al.IndexOf(30, 3, 2); // index = -1

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

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

Пример.

ArrayList al = new ArrayList(); al.Add(10); al.Add(20); al.Add(50); // al = [10, 20, 50] al.Insert(0, 5); // al = [5, 10, 20, 50] al.Insert(3, 60); // al = [5, 10, 20, 50, 60] // ошибка - позиция выходит за пределы массива // al.Insert(8, 30);

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

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

Пример.

ArrayList al = new ArrayList(); ArrayList al2 = new ArrayList(); al.Add(10); al.Add(20); al.Add(50); // al = [10, 20, 50] al2.Add(30); al2.Add(40); // al2 = [30, 40] al.InsertRange(2, al2); // al = [10, 20, 30, 40, 50]

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

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

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

Пример.

ArrayList al = new ArrayList(); al.Add(10); al.Add(20); al.Add(30); al.Add(50); al.Add(30); al.Add(20); al.Add(10); // al = [10, 20, 30, 50, 30, 20, 10] int index; // поиск значения 20 от конца массива до его начала index = al.LastIndexOf(20); // index = 5 // поиск значения 30 из позиции 1 к началу массива index = al.LastIndexOf(30, 1); // index = -1 // поиск значения 10 из позиции 5 к началу, рассматриваются 2 элементы index = al.LastIndexOf(10, 5, 2); // index = -1

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

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

Пример.

ArrayList al = new ArrayList(); int index; al.Add(10); al.Add(20); al.Add(30); al.Add(40); al.Add(50); // al = [10, 20, 30, 40, 50] index = 3; al.RemoveAt(index); // al = [10, 20, 30, 50]

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

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

ArrayList al = new ArrayList(); al.Add(10); al.Add(20); al.Add(30); al.Add(40); al.Add(50); // al = [10, 20, 30, 40, 50] al.RemoveRange(1, 2); // al = [10, 40, 50]

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

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

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

ArrayList al = new ArrayList(); al.Add(10); al.Add(20); al.Add(30); al.Add(40); al.Add(50); // al = [10, 20, 30, 40, 50] al.Reverse(); // al = [50, 40, 30, 20, 10]

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

ArrayList al = new ArrayList(); al.Add(10); al.Add(20); al.Add(30); al.Add(40); al.Add(50); // al = [10, 20, 30, 40, 50] al.Reverse(2, 3); // al = [10, 20, 50, 40, 30]

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

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

Пример.

ArrayList al = new ArrayList(); ArrayList al2 = new ArrayList(); al.Add(10); al.Add(20); al.Add(30); al.Add(40); al.Add(50); // al = [10, 20, 30, 40, 50] al2.Add(5); al2.Add(15); al2.Add(25); // al2 = [5, 15, 25] al.SetRange(2, al2); // al = [10, 20, 5, 15, 25]

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

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

Пример.

ArrayList al = new ArrayList(); al.Add(5); al.Add(-2); al.Add(10); al.Add(0); al.Add(-8); // al = [5, -2, 10, 0, -8] al.Sort(); // al = [-8, -2, 0, 5, 10]

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

Пример 1.

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

ArrayList al = new ArrayList(); al.Add(5); al.Add(-2); al.Add(10); al.Add(0); al.Add(-8); // al = [5, -2, 10, 0, -8] listBox1.Items.Clear(); for (int i = 0; i < al.Count; i++)  listBox1.Items.Add(al[i]); >

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

Пусть дана следующая структура:

struct BOOK   public string Author;  public string Title;  public int year;  public double price; >;

Чтобы добавить данные нужно использовать следующий код:

BOOK b1 = new BOOK(); ArrayList al = new ArrayList(25); // создать первую книгу b1.Author = "Author-1"; b1.Title = "Title-1"; b1.year = 1998; b1.price = 90.95; al.Add(b1); // добавить книгу в массив // создать вторую книгу b1.Author = "Author-2"; b1.Title = "Title-2"; b1.year = 1980; b1.price = 130.94; al.Add(b1); // преобразование книги BOOK[] ar = (BOOK[])al.ToArray(typeof(BOOK)); // удалить все элементы из массива al.Clear(); // al.Count = 0 listBox1.Items.Clear(); for (int i = 0; i < al.Count; i++)  listBox1.Items.Add(ar[i].Author + " - " + ar[i].Title + " - " + ar[i].year.ToString() + " - " + ar[i].price.ToString()); >

Класс ArrayList

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

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

public ArrayList() public ArrayList(ICollection с) public ArrayList(int capacity)

Первый конструктор создает пустую коллекцию класса 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, помимо свойств, определенных в интерфейсах, которые в нем реализуются:

public virtual int Capacity

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

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

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

using System; using System.Collections; namespace ConsoleApplication1 < class MyCollection < public static ArrayList NewCollection(int i) < Random ran = new Random(); ArrayList arr = new ArrayList(); for (int j = 0; j < i; j++) arr.Add(ran.Next(1, 50)); return arr; >public static void RemoveElementMyCollection(int i, int j, ref ArrayList arr) < arr.RemoveRange(i, j); >public static void AddElementInMyCollection(int i, ref ArrayList arr) < Random ran = new Random(); for (int j = 0; j < i; j++) arr.Add(ran.Next(1, 50)); >public static void WriteMyCollection(ArrayList arr) < foreach (int a in arr) Console.Write("\t", a); Console.WriteLine("\n"); > > class Program < static void Main() < // Создадим новую коллекцию чисел длиной 8 ArrayList Coll = MyCollection.NewCollection(8); Console.WriteLine("Исходная коллекция чисел: "); MyCollection.WriteMyCollection(Coll); // Удалим пару элементов MyCollection.RemoveElementMyCollection(5, 2, ref Coll); Console.WriteLine("Коллекция после удаления предпоследних двух элементов: "); MyCollection.WriteMyCollection(Coll); // Добавим еще несколько элементов MyCollection.AddElementInMyCollection(10, ref Coll); Console.WriteLine("Добавили 10 элементов: "); MyCollection.WriteMyCollection(Coll); // Отсортируем теперь коллекцию Coll.Sort(); Console.WriteLine("Отсортированная коллекция: "); MyCollection.WriteMyCollection(Coll); Console.ReadLine(); >> >

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *