Загальні відомості про Java Collections Framework
Зміст
- 1. Пакет java.util. Огляд колекцій
- 2. Стандартні інтерфейси. Перелік
- 3. Класи колекцій. Перелік
- 4. Алгоритми
- 5. Ітератори
- Споріднені теми
Пошук на інших ресурсах:
1. Пакет java.util. Огляд колекцій
Пакет java.util містить широкий спектр засобів, що дають потужні функціональні можливості для розробки програм мовою Java. Однією з цих можливостей є керування та організація роботи з наборами (групами) об’єктів, які ще називаються колекціями. У мові Java колекції були впроваджені починаючи з версії J2SE 1.2. Колекції утворюють так званий каркас, який називається Java Collection Framework і представляє собою складну ієрархію класів та інтерфейсів.
У каркасі колекцій реалізовано набір стандартних операцій над різними відомими видами груп об’єктів, до яких належать:
- черга;
- множина;
- список;
- масив;
- хеш-таблиця;
- дерево.
Основні причини (переваги) розробки каркасу колекцій:
- уникнення “ручного” програмування доступу до організованих даних та використання готових рішень;
- забезпечення високої (максимальної) продуктивності при роботі з великими групами даних;
- забезпечення єдиного способу керування для всіх наборів даних;
- за необхідністю, забезпечення зручного механізму розширення колекцій та/або їх адаптації з допомогою використання набору стандартних інтерфейсів;
- легкість створення власних колекцій, що базуються на використанні існуючого каркасу;
- забезпечення інтеграції з такими базовими структурами даних як масиви.
Весь пакет роботи з колекціями включає наступні змістовні елементи:
- інтерфейси, які забезпечують можливість розширення існуючого функціоналу на власний розсуд;
- класи – містять засоби організації роботи зі стеками, чергами, масивами тощо;
- алгоритми – набір статичних методів, що реалізують стандартні операції над колекціями (сортування, пошук тощо);
- ітератори – забезпечують єдиний стандартизований спосіб почергового доступу до елементів колекції.
Починаючи з версії JDK 5 у механізм роботи з колекціями впроваджені наступні нововведення:
- підтримка узагальнень (всі колекції є узагальненими);
- автоматичне упакування та розпакування;
- організація циклу for в стилі for each. Це означає, що всі класи в каркасі колекцій підтримують інтерфейс Iterable.
Пітримка узагальнень дозволила забезпечити типову безпеку в колекціях. Завдяки узагальненням можна явно вказувати тип даних, що зберігаються в колекції. Це дає змогу уникнути важковловимих помилок під час виконання.
В колекціях можна зберігати тільки посилання а не значення примітивних типів. Це означає, що для створення колекції цілих чисел потрібно вказувати тип-оболонку Integer замість примітивного типу int. У противному випадку компілятор видасть помилку. При цьому упакування та авторозпакування з int в Integer і навпаки відбувається автоматично. Більш детально про особливості автоупакування та авторозпакування в Java можна прочитати тут.
⇑
2. Стандартні інтерфейси. Перелік
Розширення колекцій та їх адаптація забезпечується з допомогою реалізації стандартних інтерфейсів, що включені в Java Collection Framework. До цих інтерфейсів належать:
- Collection – базовий інтерфейс, який знаходиться в вершині ієрархії колекцій;
- Queue – реалізація односторонньої черги, в якій елементи видаляться тільки з початку черги. Цей інтерфейс розширює інтерфейс Collection;
- Deque – розширює інтерфейс Queue з метою організації двохсторонньої черги;
- List – розширює інтерфейс Collection для керування послідовностями (списками об’єктів);
- Set – реалізує множину шляхом розширення інтерфейсу Collection. У множині немає однакових елементів (кожен елемент є зустрічається тільки 1 раз);
- SortedSet – розширює інтерфейс Set додаючи сортування. Отримується відсортованм множина;
- NavigableSet – розширює інтерфейс SortedSet. Забезпечує отримання елементів за першим співпадінням.
⇑
3. Класи колекцій. Перелік
У Java Collection Framework реалізовано ряд стандартних класів колекцій, які реалізують інтерфейси колекцій (див. п. 2.). Стандартні класи колекцій поділяються на 2 групи:
- класи, які представляють повну реалізацію відповідних інтерфейсів. Ці класи можна використовувати безпосередньо;
- класи, що є шаблонами. Ці класи служать основою для створення конкретних колекцій.
Хоча класи колекцій не є синхронізовані, допускається подальша синхронізація цих класів.
Перелік стандартних класів колекцій наступний:
- AbstractCollection – забезпечує реалізацію більшої частини інтерфейсу Collection;
- AbstractList – успадкований від класу AbstractCollection та реалізує більшу частину інтерфейсу List;
- AbstractQueue – успадкований від класу AbstractCollection та реалізує частину інтерфейсу Queue;
- AbstractSequentalList – успадковує (розширює) клас AbstractList для застосування в колекціях, що використовують послідовності при доступі до елементів;
- LinkedList – успадкований від класу AbstractSequentialList і реалізує зв’язаний список;
- ArrayList – клас, що успадкований від AbstractList і реалізує динамічний масив;
- ArrayDeque – успадкований від AbstractCollection і реалізує інтерфейс Deque;
- AbstractSet – успадкований від класу AbstractCollection і реалізує більшу частину інтерфейсу Set;
- EnumSet – успадкований від класу AbstractSet для застосування разом з елементами типу enum;
- HashSet – успадкований від класу AbstractSet. Цей клас реалізує так звані хеш-таблиці, елементи яких представляють собою пари key:value (ключ:значення);
- LinkedHashSet – клас, що успадкований з HashSet і характерний тим, що елементи вводяться у визначеному порядку;
- PriorityQueue – успадкований з класу AbstractQueue і реалізує чергу з пріоритетами;
- TreeSet – успадкований з класу AbstractSet. Цей клас реалізує множину, яка зберігається у вигляді деревовидної структури.
⇑
4. Алгоритми
Алгоритми визначені в класі Collections у вигляді статичних методів і призначені для оперування колекціями. Оскільки алгоритми це статичні методи, то вони доступні усім класам колекцій, тобто є спільними для використання.
Нижче наведено перелік алгоритмів, що можуть застосовуватись до колекцій:
- addAll – вставляє вказані елементи в задану колекцію;
- asLifoQueue – конвертує колекцію у стек;
- binarySearch – реалізує пошук значення у заданому списку;
- checkedCollection, checkedList, checkedMap, checkedNavigableMap, checkedNavigableSet, checkedQueue, checkedSet, checkedSortedMap, checkedSortedSet – повертають динамічно типізоване представлення відображення для списків, карт відображень, множин, черг;
- copy – копіює елементи з одного списку в інший;
- disjoint – порівнює елементи двох колекцій;
- emptyEnumeration – повертає пусте зчислення;
- emptyIterator – повертає пустий ітератор;
- emptyList, emptyListIterator – повертає пустий список та пустий ітератор списку;
- emptyMap – повертає пусте відображення типу Map;
- emptyNavigableMap – повертає незмінюване пусте відображення типу, що виводиться з інтерфейсу NavigableMap;
- emptySet – повертає незмінювану пусту множину;
- emptyNavigableSet – повертає незмінювану пусту множину типу NavigableSet;
- emptySortedMap, emptySortedSet – повертають незмінюване пусте відображення типу, що отримується з інтерфейсів SortedMap та SortedSet;
- enumeration – повертає зчислення елементів на основі заданої колекції;
- fill – заповнює заданий список значенням об’єкту;
- frequency – підраховує кількість входжень заданого об’єкту в заданій колекції;
- indexOfSubList – повертає позицію першого входження заданого підсписку в списку;
- lastIndexOfSubList – повертає позицію останнього входження заданого підсписку в списку;
- list – повертає масив типу ArrayList на основі заданого зчислення;
- max – повертає максимальний елемент з заданої колекції;
- min – повертає мінімальний елемент в колекції;
- newSetFromMap – повертає множину, яка утворюється на основі заданого відображення;
- nCopies – повертає список, що містить задану кількість копій заданого об’єкту;
- replaceAll – здійснює заміну всіх входжень заданого елементу на нове значення у заданому списку;
- reverse – реверсує заданий список;
- reverseOrder – повертає компаратор, що є зворотнім до заданого;
- rotate – реалізує зміщення заданого списку на задану кількість позицій;
- shuffle – реалізує перемішування (випадковим чином) елементів заданого списку;
- singleton – повертає заданий об’єкт у вигляді незмінюваної множини;
- singletonList – повертає заданий об’єкт у вигляді незмінюваного списку;
- singletonMap – конвертує пару key:value у відображення;
- sort – сортує елементи заданого списку;
- swap – змінює місцями елементи заданого списку;
- synchronizedCollection, synchronizedList, synchronizedMap, synchronizedNavigableMap, synchronizedNavigableSet, synchronizedSet, synchronizedSortedMap, synchronizedSortedSet – повертають синхронізовану послідовність яка є потокобезпечною. Обробляються колекції, списки, відображення, множини;
- unmodifialbleCollection, unmodifiableList, unmodifiableMap, unmodifiableNavigableSet, unmodifiableSet, unmodifiableSortedMap, unmodifiableSortedSet – на основі заданої послідовності повертають незмінювану послідовність. Розглядаються реалізації для колекцій, списків, відображень, множин.
⇑
5. Ітератори
Ітератори – це спеціальні класи, які реалізують інтерфейси для стандартизованого доступу до окремих елементів колекції. Ітератори забезпечують спосіб перебору вмісту колекцій. Будь-який ітератор – це об’єкт класу, що реалізує один з двох інтерфейсів:
- Iterator – забезпечує організацію циклу для перебору колекції з доступом до елементів цієї колекції;
- ListIterator – успадкований від інтерфейсу Iterator і реалізує двохсторонній обхід списку з доступом до елементів.
Оголошення інтерфейсів Iterator та ListIterator має вигляд
interface Iterator<E> interface ListIterator<E>
тут
- E – тип об’єктів, які потрібно перебрати.
⇑
Споріднені теми
- Клас ArrayList. Динамічний масив. Загальні відомості. Створення масиву
- Пакет java.lang. Загальні відомості. Огляд класів та інтерфейсів
⇑