JavaRush /Java блог /Random UA /Кава-брейк #185. Детальний посібник з Java Collection Fra...

Кава-брейк #185. Детальний посібник з Java Collection Framework

Стаття з групи Random UA
Джерело: Medium Даний посібник допоможе вам краще вивчити роботу різних класів та інтерфейсів, що входять до Java Collection Framework. Кава-брейк #185.  Детальний посібник з Java Collection Framework - 1Java Collection – це фреймворк, який забезпечує уніфіковану архітектуру для зберігання та керування групою об'єктів. За своєю суттю, це набір класів та інтерфейсів, які забезпечують стандартний спосіб представлення колекцій об'єктів та керування ними мовою Java. Також фреймворк допомагає реалізації часто використовуваних структур даних, таких як List, Set і Map. Java Collection Framework включає кілька інтерфейсів та класів. Ось список деяких із них:

Інтерфейси

Інтерфейси Java Collection Framework визначають загальну поведінку та операції, які можуть виконуватися з колекціями. Сюди входять додавання чи видалення елементів, повторення елементів у колекції та багато іншого.
  • Collection : кореневий (root) інтерфейс в ієрархії колекцій, що представляє групу об'єктів, відомих як елементи.
  • List : впорядкована колекція елементів, що припускає дублювання.
  • Set : колекція елементів, що не допускають дублювання.
  • Map : колекція пар ключ-значення (key-value), де кожен ключ є унікальним.
  • Queue : черга - це структура даних, яка використовується для зберігання елементів у порядку появи (First-In-First-Out, FIFO).
У цей список увійшли далеко не всі, а лише інтерфейси, що найбільш використовуються в Java Collection Framework. Тепер давайте докладно розглянемо кожен із них.

Collection

Колекція (Collection) є групою об'єктів, відомих як її елементи. Це об'єкт, який може містити посилання на інші об'єкти. Інтерфейс Collection є коренем ієрархії колекцій. Це базовий інтерфейс для всіх колекцій Java Collection Framework. Він визначає основні методи, які мають бути реалізовані у всіх колекціях, такі як add() , remove() та contains() . Ось приклад використання колекцій Java Collection Framework. Тут інтерфейс Collection застосовується для додавання та видалення елементів з колекції:
import java.util.Collection;
import java.util.ArrayList;

public class CollectionExample {
    public static void main(String[] args) {
        // Создаем новую коллекцию
        Collection<String> stringCollection = new ArrayList<>();

        // Добавляем несколько элементов в коллекцию
        stringCollection.add("hello");
        stringCollection.add("world");
        stringCollection.add("foo");
        stringCollection.add("bar");

        // Печатаем число элементов в коллекции
        System.out.println("Number of elements: " + stringCollection.size());

        // Удаляем элемент из коллекции
        stringCollection.remove("foo");

        // Опять печатаем число элементов в коллекции
        System.out.println("Number of elements: " + stringCollection.size());
    }
}
На висновку отримуємо:
Кількість елементів: 4 Кількість елементів: 3
Як бачите, інтерфейс Collection є простим і зручним способом виконання стандартних операцій з колекцією об'єктів. Він часто використовується як відправна точка при роботі з колекціями в Java. Java Collection Framework включає кілька інтерфейсів, які визначають загальну поведінку для різних типів колекцій. Деякі з них входять до групи інтерфейсів java.util.Collection :
  • java.util.List
  • java.util.set
  • java.util.Queue

java.util.List

List (список) – це впорядкований набір об'єктів, кожен елемент якого займає певну позицію у списку. Інтерфейс List розширює інтерфейс Collection і додає до нього кілька методів для роботи зі списками, таких як методи доступу до елементів за їх становищем у списку та методи пошуку та сортування списків. List може містити елементи, що повторюються , доступ до цих елементів можна отримати за їх положенням у списку. Ось приклад використання інтерфейсу List для додавання, видалення та доступу до елементів у списку:
import java.util.List;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        // Создаем новый список
        List<String> stringList = new ArrayList<>();

        // Добавляем несколько элементов в список
        stringList.add("India");
        stringList.add("UAE");
        stringList.add("London");
        stringList.add("US");

        // Печатаем первый элемент в списке
        System.out.println("First element: " + stringList.get(0));

        // Удаляем второй элемент из списка
        stringList.remove(1);

        // Печатаем второй элемент в списке
        System.out.println("Second element: " + stringList.get(1));
    }
}
Висновок:
First element: India Second element: London
Як показано вище, інтерфейс List забезпечує зручний спосіб роботи із впорядкованими колекціями елементів. Він зазвичай використовується, коли вам потрібно підтримувати порядок елементів у колекції або коли вам потрібно отримати доступ до елементів за їх індексом у списку.

java.util.Set

Set в Java Collection Framework - це невпорядковане безліч унікальних елементів, в якому не допускаються повторювані елементи . Інтерфейс Set розширює інтерфейс Collection і додає до нього кілька методів, таких як методи перевірки наявності елемента в множині (set) та методи додавання та видалення елементів з множини. Ось приклад використання інтерфейсу Set для додавання та видалення елементів з множини в Java Collection Framework:
import java.util.Set;
import java.util.HashSet;

public class SetExample {
    public static void main(String[] args) {
        // Создаем новый set
        Set<String> stringSet = new HashSet<>();

        // Добавляем несколько элементов в set
        stringSet.add("Jan");
        stringSet.add("Feb");
        stringSet.add("March");
        stringSet.add("April");

        // Проверяем наличие в set елемента "March"
        if (stringSet.contains("March")) {
            System.out.println("The set contains the element 'March'");
        }

        // Удаляем элемент "April" из set
        stringSet.remove("April");

        // Опять проверяем наличие елемента "April" в set
        if (!stringSet.contains("April")) {
            System.out.println("The set no longer contains the element 'April'");
        }
    }
}
Висновок:
Set set contains the element 'March' The set no longer contains the element 'April'

java.util.Queue

Queue (черга) - це структура даних, яка використовується для зберігання елементів у порядку їх появи (FIFO). Це означає, що перший елемент, доданий у чергу, буде першим віддаленим. Ось приклад того, як використовувати чергу в Java Collection Framework:
// створення очереди
Queue<String> queue = new LinkedList<>();

// Добавление элементов в очередь
queue.add("apple");
queue.add("banana");
queue.add("orange");
// Печатаем очередь
System.out.println("Queue: " + queue);
// Удаляем элемент из очереди
String element = queue.remove();
System.out.println("Removed element: " + element);
// Печатаем обновленную очередь
System.out.println("Queue: " + queue);
У цьому прикладі ми створабо чергу рядків і додали до неї три елементи: "apple", "banana" та "orange". Потім ми друкуємо чергу, щоб побачити її стан. Далі ми видаляємо елемент із черги і виводимо його на консоль. Нарешті, ми друкуємо оновлену чергу, щоб переконатися, що віддалений елемент не перебуває у черзі.

Map

Інтерфейс java.util.Map Java Collection Framework використовується для зіставлення ключів зі значеннями. Він дозволяє зберігати елементи у вигляді пар ключ-значення та надає методи для доступу, зміни та повторення елементів на карті. Нижче наведено приклад використання інтерфейсу Map :
// Создаем Map
 Map<String, Integer> map = new  HashMap <>();
// Добавляем элементы в Map
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
// Печать Map
 System.out.println("Map: " + map);
// Получаем значення для определенного ключа
int  value  = map.get( "banana" );
System.out.println("Value for 'banana': " + value);
// Удаляем элемент из Map
map.remove("orange");
// Печать обновленной карты
 System.out.println( "Map: " + map);
У цьому прикладі ми створюємо карту (map) рядків і цілих чисел, додаючи до неї три елементи: "apple" зіставляється з 1, "banana" зіставляється з 2 і "orange" зіставляється з 3. Потім ми друкуємо карту, щоб побачити її поточне значення. Після цього ми отримуємо значення ключа "banana" та виводимо його на консоль. Нарешті, ми видаляємо пару ключ-значення для “orange” з карти та друкуємо оновлену карту, щоб побачити, що віддаленого елемента на ній немає.

Classes

Клас (Class) – це конкретна реалізація інтерфейсу колекції. Він надає конкретні реалізації загальної поведінки та операцій, визначених інтерфейсами у фреймворку.
  • ArrayList : реалізація інтерфейсу List із змінним розміром масиву.
  • LinkedList : двозв'язний список, реалізація інтерфейсів List і Deque .
  • HashSet : реалізація Set , що використовує хеш-таблицю для зберігання.
  • TreeSet : реалізація Set , що використовує дерево для зберігання.
  • HashMap : реалізація Map , що використовує хеш-таблицю для зберігання.
Наведений вище список є одним з класів, що найчастіше використовуються в Java Collection Framework. Тепер розглянемо докладне пояснення цих класів.

ArrayList

Клас java.util.ArrayList у колекціях Java використовується для зберігання змінного розміру масиву елементів у списку. Це широко використовувана реалізація інтерфейсу java.util.List , яка використовує масив для зберігання елементів та надає ефективні методи для доступу, зміни та повторення елементів у списку. Клас java.util.ArrayList забезпечує швидкий довільний доступ до своїх елементів, але повільну вставку та видалення у довільних позиціях. Нижче наведено приклад використання класу ArrayList у Java Collection Framework:
// Создаем array list
List<String> list = new ArrayList<>();
// Добавляем элементы в array list
list.add("qa");
list.add("devops");
list.add("dev");
// Печатаем array list
System.out.println("Array list: " + list);
// Доступ к элементу по определенному индексу
String element = list.get(1);
System.out.println("Element at index 1: " + element);
// Удаление елемента из the array list
list.remove(1);
// Print the updated array list
System.out.println("Array list: " + list);
Як бачите, ми створабо масив рядків і додали три елементи: “qa”, “devops” і “dev”. Потім ми надрукували список масивів, щоб побачити його стан. Після цього ми отримуємо доступ до елемента з індексом 1 та виводимо його на консоль. Нарешті ми видаляємо елемент з індексом 1 зі списку масивів і друкуємо оновлений список масивів, щоб переконатися, що віддаленого елемента більше немає у списку.

LinkedList

Клас java.util.LinkedList в Java Collection Framework успадковує клас AbstractList і реалізує інтерфейси List та Deque . Він надає ефективні методи для додавання, видалення та доступу до елементів на початку та наприкінці списку. Також цей Клас є реалізацією інтерфейсу List , у якій зберігання елементів використовується двозв'язний список (doubly-linked list). Він забезпечує швидку вставку та видалення у довільних позиціях, але повільний довільний доступ до своїх елементів. Ось приклад того, як використовувати клас LinkedList у Java Collection Framework:
// Создаем linked list
List<String> list = new LinkedList<>();
// Добавляем элементы в linked list
list.add("selenium");
list.add("cypress");
list.add("playwright");
// Печатаем linked list
System.out.println("Linked list: " + list);
// Добавляем элемент в начало списка
list.add(0, "webdriver.io");
// Печатаем обновленный linked list
System.out.println("Linked list: " + list);
// Удаляем первый элемент в списке
list.remove(0);
// Еще раз печатаем обновленный linked list
System.out.println("Linked list: " + list);
У цьому прикладі ми створабо зв'язаний список (linked list) рядків і додали до нього три елементи: "selenium", "cypress" та "playwright". Потім ми друкуємо пов'язаний список, щоб побачити його стан. Далі ми додаємо елемент “webdriver.io” на початок списку та друкуємо оновлений зв'язаний список. Нарешті, ми видаляємо перший елемент зі списку і знову друкуємо оновлений список, щоб побачити, що віддаленого елемента більше немає в списку.

HashSet

Клас java.util.HashSet у Java Collection Framework використовується для зберігання колекції унікальних елементів у set (наборі, здібності). Він забезпечує реалізацію інтерфейсу java.util.Set на основі хеш-таблиці. Також він забезпечує швидку вставку, видалення та пошук, але не зберігає порядок своїх елементів. Нижче наведено приклад використання класу HashSet у Java Collection Framework:
// Создаем hash set
Set<String> set = new HashSet<>();

// Добавляем элементы в hash set
set.add("rose");
set.add("lily");
set.add("lotus");
// Попытка добавить повторяющийся элемент
set.add("rose");
// Печатаем hash set
System.out.println("Hash set: " + set);
// Удаляем элемент из hash set
set.remove("lily");
// Печать обновленного hash set
System.out.println("Hash set: " + set);
Тут ми створабо хеш-набір (hash set) рядків і додали до нього три елементи: "rose", "lily" та "lotus". Потім ми знову намагаємося додати елемент “rose”, але оскільки набір хешів не допускає дублювання, він не буде доданий. Після цього ми друкуємо hash set, щоб побачити його стан. Потім видаляємо елемент “lily” з set і друкуємо оновлений hash set, щоб побачити, що віддаленого елемента більше немає в set.

TreeSet

Клас java.util.TreeSet у Java Collection Framework використовується для зберігання колекції унікальних елементів у множині (set), відсортованій у порядку зростання. Він забезпечує деревоподібну реалізацію інтерфейсу java.util.Set для зберігання елементів, не допускаючи дублювання елементів. Клас забезпечує швидку вставку, видалення та пошук і підтримує порядок своїх елементів відповідно до їх природного порядку або компаратора. Ось приклад того, як використовувати клас TreeSet у Java Collection Framework:
// Создаем tree set
Set<String> set = new TreeSet<>();

// Добавляем элементы в tree set
set.add("apple");
set.add("banana");
set.add("orange");
// Попытка добавить повторяющийся элемент
set.add("apple");
// Печатаем tree set
System.out.println("Tree set: " + set);
// Удаляем элемент из tree set
set.remove("banana");
// Печатаем обновленный tree set
System.out.println("Tree set: " + set);
У цьому прикладі ми створюємо деревоподібний набір рядків і додаємо до нього три елементи: "apple", "banana" та "orange". Потім ми знову намагаємося додати елемент "apple", але оскільки tree set не допускає дублювання, він не буде доданий. Після цього ми друкуємо tree set, щоб побачити його стан. Оскільки tree set відсортовано в порядку зростання, елементи будуть надруковані як “apple”, “banana” і “orange”. Потім видаляємо елемент “banana” з набору і друкуємо оновлений tree set, щоб побачити, що віддаленого елемента більше немає в наборі.

HashMap

Клас java.util.HashMap в Java Collection Framework використовується для збереження зіставлення ключів зі значеннями на карті. Він забезпечує реалізацію інтерфейсу java.util.Map на основі хеш-таблиці та дозволяє зберігати елементи у вигляді пар ключ-значення. Клас забезпечує швидку вставку, видалення та пошук, але не зберігає порядок своїх елементів. Ось приклад того, як використовувати клас HashMap у Java Collection Framework:
// Создаем hash map
Map<String, Integer> map = new HashMap<>();

// Добавляем элементы в hash map
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
// Печатаем hash map
System.out.println("Hash map: " + map);
// Получаем значення для определенного ключа
int value = map.get("banana");
System.out.println("Value for 'banana': " + value);
// Удаляем элемент из hash map
map.remove("orange");
// Печатаем обновленный hash map
System.out.println("Hash map: " + map);
У цьому прикладі ми створюємо хеш-карту рядків з цілими числами і додаємо до неї три елементи: "apple" зіставляється з 1, "banana" зіставляється з 2 і "orange" зіставляється з 3. Потім ми друкуємо хеш-карту, щоб побачити його поточний стан. Після цього ми отримуємо значення ключа "banana" та виводимо його на консоль. Нарешті, ми видаляємо пару ключ-значення для “orange” з хеш-карти та друкуємо оновлену хеш-карту, щоб побачити, що віддаленого елемента в ній більше немає.

Висновок

Java Collection Framework є набором класів та інтерфейсів, які забезпечують стандартний спосіб представлення колекцій об'єктів та управління ними в мові програмування Java. Це дозволяє розробникам/тестувальникам працювати з колекціями об'єктів узгодженим та ефективним чином. Фреймворк надає їм методи для зберігання, доступу та керування елементами в колекції, а також дозволяє легко перемикатися між різними реалізаціями колекцій залежно від вимог програми.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ