Огляд колекцій в java (java collections framework), програмування на java, android

Колекції в Java

Java Колекції є одним із стовпів Java Core. Вони використовуються майже в кожному додатку, тому ми просто зобов'язані вміти використовувати Java Collections Framework ефективно.

Що таке Колекції?

Колекції - це контейнери, групи елементів, які являють собою єдине ціле.

Наприклад: банку цукерок, список імен і т.д. Колекції використовуються майже в кожній мові програмування і Java не є винятком. Як тільки колекції з'явилися в Java, то налічували всього кілька класів: Vector, Stack, Hashtable, Array. Але вже в Java 1.2 з'явився повноцінний Java Collections Framework, з яким ми і будемо сьогодні знайомитися.

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

Огляд колекцій в java (java collections framework), програмування на java, android

Переваги Java Collections Framework

В Java Collections Framework є наступні переваги:

  • Вимагає менше зусиль. Фреймворк має безліч поширених типів колекцій і корисних методів для маніпуляції даними. Таким чином, ми можемо зосередитися на бізнес-логіці, а не розробці наших API.
  • Відмінна якість - використання добре перевірених колекцій збільшує якість нашої програми.
  • Повторне використання і сумісність

інтерфейси колекцій

Інтерфейси є основою Java Collections Framework. Зверніть увагу, що всі інтерфейси є Generic, наприклад public interface Collection. Використання - це вказівка ​​типу об'єкта, який колекція може містити. Це допомагає скоротити помилки часу виконання за допомогою перевірки типів об'єктів під час компіляції.

Слід зазначити, що платформа Java не надає окремі інтерфейси для кожного типу колекцій. Якщо якась операція не підтримується, то реалізація колекції кидає UnsupportedOperationException.

Коротко по кожній колекції

Інтерфейс ітератора (Iterator)

Итератор надає методи для перебору елементів будь-якої колекції. Ми можемо отримати примірник ітератора з колекції за допомогою методу iterator. Ітератори дозволяють видалити елементи з базової колекції під час виконання ітерації.

Інтерфейс безлічі (Set)

Набір являє собою колекцію, яка не може містити елементи, що повторюються. Цей інтерфейс являє математичну абстракцію для подання множин у вигляді колоди карт.

Платформа Java містить три реалізації Set. HashSet, TreeSet і LinkedHashSet.І нтерфейси Set не дозволяє здійснювати довільний доступ до елементу в колекції. Ми можемо використовувати итератор або цикл по кожному елементу для перебору елементів.

Інтерфейс Список (List)

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

Ось невеликий приклад використання:

Інтерфейс Черга (Queue)

Черга - колекція, яка використовується для зберігання кількох елементів.

У черзі зазвичай, але не обов'язково, елементи розташовуються за принципом FIFO (f irst-i n, f irst-o ut = перший увійшов, першим вийшов). У черзі FIFO, все нові елементи вставляються в кінець черги.

інтерфейс Dequeue

Колекція Dequeue підтримує вставку елемента і видалення елемента як на початок, так і в кінець колекції. Назва Deque це скорочення від «двухконцевой черзі» і, як правило, вимовляється як «deck». Більшість реалізацій DEQUE не встановлюють обмеження на кількість елементів.

Цей інтерфейс визначає методи для доступу до елементів на кінцях дека. Методи надаються для вставки, видалення, вилучення елемента.

інтерфейс Map

Map є об'єктом, який містить ключі і значення. Map не може містити дублі ключів: Кожен ключ може мати тільки одне значення.

Платформа Java містить три реалізації Map: HashMap, TreeMap і LinkedHashMap.

інтерфейс ListIterator

ListIterator (итератор для списків) дозволяє програмісту проходити список в будь-якому напрямку, змінювати список у ітерації, та отримувати актуальну позицію ітератора в списку.

інтерфейс SortedSet

SortedSet є безліч, в якому елементи зберігаються в порядку зростання.

інтерфейс SortedMap

Класи реалізують Java колекції

Java Collections framework надає велику кількість класів з реалізацією інтерфейсів колекцій. Найбільш використовуваними і поширеними реалізаціями є ArrayList. HashMap і HashSet. Зазвичай класи, що реалізують колекції, не є потокобезпечна.

Далі в цій статті ми розберемо найбільш використовувані класи в Java Collections framework.

HashSet Клас

Це базова реалізація інтерфейсу Set. яка базується на HashMap.

Цей клас пропонує однаковий час виконання базових операцій (add, remove. Contains і size). Ми можемо встановити початкову ємність і коефіцієнт навантаження для цієї колекції.

клас TreeSet

NavigableSet створений на основі TreeMap. Елементи можуть бути впорядковані в порядку їх додавання або за допомогою компаратора.

Ця реалізація забезпечує log (n) час виконання для основних операцій (add, remove і contains).

клас ArrayList

ArrayList - реалізація інтерфейсу List у вигляді масиву змінної довжини. Реалізує всі операції зі списком. Плюс до цього ArrayList забезпечує методи для маніпулювання розміром масиву, який використовується для зберігання списку. (Цей клас приблизно відповідає вектору, але не є synchronized).

LinkedList клас

LinkedList - реалізація інтерфейсів List і Deque у вигляді двусвязного списку. Здійснює всі додаткові операції зі списком.

клас HashMap

HashMap є реалізацією інтерфейсу Map. Ця реалізація забезпечує всі додаткові операції Map і дозволяє нульові значення і ключі із значенням null. Клас HashMap приблизно еквівалентно Hashtable. крім того, що він не синхронізований і дозволяє null. Цей клас не дає ніяких гарантій упорядкованого розміщення елементів.

клас TreeMap

TreeMap є червоно-чорне дерево, засноване на NavigableMap. Map упорядковано за допомогою компаратора.

Ця реалізація забезпечує log (n) час виконання для операцій containsKey, get, put і remove.

клас PriorityQueue

У черзі елементи додаються в порядку FIFO, але іноді ми хочемо додавати елементи на підставі їх пріоритету. У цьому випадку ми можемо використовувати PriorityQueue, забезпечивши при цьому реалізацію компаратора для елементів PriorityQueue. Слід зазначити, що PriorityQueue не дозволяють зберігати null

клас Collections

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

Цей клас містить методи основних алгоритмів Сollection framework, а саме методи бінарного пошуку, сортування, перемішування, а також метод, який повертає зворотний порядок елементів і багато інших.

синхронізовані оболонки

Синхронізовані оболонки додають автоматичну синхронізацію (потоко-безпека) до певної колекції. Кожен з шести основних інтерфейсів колекцій (Collection, Set, List, Map, SortedSet. І SortedMap) має статичним промисловим способом синхронізації.