Класс ArrayList

Класс ArrayList


Содержание



1. К какому виду коллекций принадлежит класс 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());
}