Типи колекцій. Інтерфейс 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

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert