Типи колекцій. Інтерфейс Collection/Клас ArrayList та інтерфейс List

Прокрутити вниз

У Java колекції — це спеціальні структури даних, які дозволяють зберігати й обробляти об’єкти. Вони забезпечують гнучке управління елементами, включаючи додавання, видалення, пошук і сортування. Інтерфейс Collection — це основа для всіх колекцій, а інтерфейс List  і клас ArrayList є його важливими реалізаціями.

1. Типи колекцій у Java

Колекції в Java поділяються на кілька основних типів:

  • Списки (Lists): впорядковані колекції, що дозволяють зберігати елементи в певній послідовності, з можливістю доступу до них за індексами (наприклад, ArrayList, LinkedList).
  • Множини (Sets): колекції, які не дозволяють дублікатів (наприклад, HashSet, TreeSet).
  • Черги (Queues): колекції, які працюють за принципом черги, де елементи обробляються в порядку черги (наприклад, PriorityQueue).
  • Мапи (Maps): колекції, які зберігають пари ключ-значення (наприклад, HashMap, TreeMap).

2. Інтерфейс Collection

Інтерфейс Collection є базовим інтерфейсом для всіх колекцій в Java, окрім мап (maps). Він визначає основні операції, які можна виконувати з будь-якою колекцією: додавання, видалення, перевірка наявності елементів, очищення тощо. Деякі з основних методів Collection:

  • add(E e): додає елемент до колекції.
  • remove(Object o): видаляє елемент з колекції.
  • isEmpty(): перевіряє, чи є колекція порожньою.
  • size(): повертає кількість елементів у колекції.

Однак інтерфейс Collection не гарантує порядок елементів або унікальність, це вже залежить від конкретної реалізації (наприклад, списки мають порядок, множини не дозволяють дублікати).

3. Інтерфейс List

Інтерфейс List — це підінтерфейс Collection, який представляє впорядковану колекцію, що дозволяє працювати з елементами за їх індексами, як у масивах. Кожен елемент у списку має своє місце, і можна мати дублікатів.

Основні методи інтерфейсу List:

  • get(int index): повертає елемент за заданим індексом.
  • add(int index, E element): додає елемент на певну позицію в списку.
  • remove(int index): видаляє елемент на певній позиції.
  • set(int index, E element): змінює елемент на певній позиції.
  • indexOf(Object o): повертає індекс першого входження елемента.

Приклад використання List:

List<String> cities = new ArrayList<>();
cities.add(“Київ”);
cities.add(“Львів”);
cities.add(“Одеса”);

System.out.println(cities.get(1)); // Виведе “Львів”

В українському контексті, це можна використовувати для списку міст або об’єктів культури, де кожне місто має свій індекс і зберігає свою позицію в списку.

4. Клас ArrayList

ArrayList — це популярна реалізація інтерфейсу List, яка зберігає елементи у вигляді динамічного масиву. Вона дозволяє швидкий доступ до елементів за індексами і підтримує динамічне розширення масиву. Основною перевагою ArrayList є швидкий доступ до елементів за індексом (операція get()), однак додавання або видалення елементів може бути повільнішим, якщо операції вимагають зміщення великої кількості елементів.

Приклад використання ArrayList:

ArrayList<String> fruits = new ArrayList<>();
fruits.add(“Яблуко”);
fruits.add(“Груша”);
fruits.add(“Слива”);

System.out.println(fruits); // Виведе [Яблуко, Груша, Слива]

Особливості ArrayList:

  • Динамічний розмір: ArrayList може автоматично змінювати свій розмір під час додавання нових елементів.
  • Швидкий доступ: Операція get() виконується за час O(1), тобто доступ до будь-якого елемента відбувається дуже швидко.
  • Порівняння з масивами: На відміну від масивів, ArrayList дозволяє легко додавати або видаляти елементи, не створюючи новий масив.

5. Переваги та недоліки ArrayList

Переваги:

  • Швидкий доступ за індексом: Використання індексів дозволяє швидко отримувати елементи, що є корисним, наприклад, для списків користувачів у додатку.
  • Гнучкість: ArrayList автоматично змінює свій розмір, що зручно, коли кількість елементів змінюється динамічно.

Недоліки:

  • Повільна вставка та видалення: Якщо ви додаєте або видаляєте елементи в середині списку, це може бути неефективно, оскільки всі наступні елементи повинні бути зміщені.
  • Велика кількість операцій вставки/видалення може знизити продуктивність.

6. Порівняння ArrayList з іншими реалізаціями List

  • LinkedList: Це ще одна популярна реалізація інтерфейсу List. Основна відмінність полягає в тому, що LinkedList реалізує двонапрямлену зв’язану структуру, що робить його ефективним для частих операцій вставки та видалення, але повільним для доступу за індексами.
  • Vector: Це більш “старовинна” реалізація, схожа на ArrayList, але синхронізована, що робить її придатною для багатопоточних додатків, хоча сучасні Java-програми зазвичай використовують інші методи синхронізації.

Висновок

Інтерфейси Collection та List разом із класом ArrayList забезпечують потужні можливості для роботи з даними в Java. ArrayList є ефективним вибором для багатьох задач, де важливий швидкий доступ до елементів, таких як створення списків продуктів або послуг в електронній комерції. Водночас, для специфічних завдань, таких як часті вставки або видалення, варто використовувати інші реалізації колекцій, такі як LinkedList.

Типи колекцій. Інтерфейс CollectionКлас ArrayList та інтерфейс List