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

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# пам'ять ArrayList рисунок

Рисунок 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()

Рисунок 3. З допомогою методу Clone() здійснюється копіювання даних зі змінної al у змінну al2 з одночасним виділенням пам’яті

 


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];
}

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;
};

Щоб додати дані в ListBox потрібно використати наступний код:

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-02";
b1.Title = "Title-02";
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());
}