Класс ArrayList
Содержание
- 1. К какому виду коллекций принадлежит класс ArrayList?
- 2. Какие интерфейсы реализуются в классе ArrayList?
- 3. Как создать пустую коллекцию ArrayList?
- 4. Как создать коллекцию ArrayList числом 25 элементов?
- 5. Как добавить новый элемент в коллекцию ArrayList?
- 6. Как определить количество элементов массива типа ArrayList? Свойство Count.
- 7. Как перевести массив типа ArrayList в массив целых чисел? Пример демонстрации метода ToArray() из класса ArrayList.
- 8. Организация работы класса ArrayList со структурами на примере структуры типа КНИГА (BOOK).
- 8.1. Организация массива структур типа BOOK (книга). Метод Add().
- 8.2. Как перевести динамический массив ArrayList в массив структур? Демонстрация метода ToArray() из класса ArrayList для структуры типа BOOK (КНИГА).
- 8.3. Как определить количество элементов структуры типа BOOK (КНИГА) в массиве ArrayList?
- 9. Как удалить все элементы из массива типа ArrayList? Свойство Clear().
- 10. Как удалить заданный элемент из массива ArrayList? Метод Remove().
- 11. Как скопировать в другую область памяти элемент типа ArrayList? Метод Clone().
- 12. Определение наличия элемента в массиве ArrayList. Метод Contains().
- 13. Как из массива ArrayList выбрать его часть? Метод GetRange().
- 14. Пример вычисления суммы элементов массива типа ArrayList.
- 15. Поиск позиции первого вхождения элемента в массиве ArrayList. Метод IndexOf().
- 16. Как вставить элемент в заданную позицию массива ArrayList? Метод Insert().
- 17. Как в массив ArrayList вставить другой массив из заданной позиции? Метод InsertRange().
- 18. Определение последнего вхождения заданного элемента. Метод LastIndexOf().
- 19. Как удалить элемент из массива ArrayList, который находится в заданной позиции? Метод RemoveAt().
- 20. Удаление диапазона значений, заданных индексами. Метод RemoveRange().
- 21. Реверс массива ArrayList. Функция Reverse().
- 22. Копирование элементов массива ArrayList в другой массив. Метод SetRange().
- 23. Как сортировать массив типа ArrayList? Метод Sort().
- 24. Как скопировать данные из ArrayList в компонент ListBox?
Поиск на других ресурсах:
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).
Рисунок 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]
Рисунок 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]
Рисунок 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()); }