Колекції у Java 2


  • Не варто плутати Collection – інтерфейс-предок для Set та List і Collections – клас, у якому зібрано статичні методи для роботи з колекціями.
  • Існує 4 групи колекцій: списки (List), набори (Set), мапи (Map) та черги (Queue). Варто зауважити, що не всі вони імплементують інтерфейс Collection (крім мап).Java Collections

Цю ілюстрацію взято зі статті на хабрі (російською): http://habrahabr.ru/post/237043/

  • Колекції бувають впорядковані та сортовані (ну і невпорядковані та несортовані). Ці терміни можуть здаватися подібними і заплутати. Впорядковані колекції це такі, при ітеруванні через які ми отримуємо елементи у певному порядку (можливо у порядку додавання елементів у колекцію, або навіть на перший погляд хаотично, та все ж певний порядок є). Сортовані колекції не просто зберігають елементи впорядковано, але й сортують їх за певними ознаками, скажімо за алфавітом. Можна також реалізувати власний порядок сортування.
  • Списки є впорядкованими колекціями, які допускають дублювання елементів всередині. ArrayList являє собою динамічний масив, призначений для швидкого ітерування та доступу на читання. LinkedList має в основі двов’язний список (кожен елемент посилається на попередній і наступний), тому дозволяє швидко додати елементи в середину списку. Vector – синхронізована версія ArrayList. Stack – розширення вектора, яке реалізує стек (LIFO).
  • Набори є колекціями, які не дозволяють дублювати елементи. HashSet – невпорядкована колекція, яка всередині має HashMap (використовуються тільки ключі хешмапи) і таким чином елементи з однаковим hashCode() вважатимуться ідентичними. LinkedHashSet – впорядкована за порядком додавання елементів колекція, базується на LinkedHashMap. TreeSet базується на NavigableMap і є сортованою колекцією, яка до того ж дозволяє задати власний порядок сортування за допомогою відповідного компаратора.
  • Мапи зберігають дані у форматі ключ-значення і тому не допускають однакових ключів. Мапи не імплементують інтерфейс Collection, натомість вони імплементують інтерфейс Map. HashMap – найбільш часто вживана мапа, дозволяє використовувати null як у якості ключа, так і в якості значень. Hashtable (зверніть увагу на написання – не кемел-кейсом) – синхронізована версія HashMap, яка не дозволяє використовувати null (ні як ключ, ні як значення). LinkedHashMap – впорядкована версія хеш-мапи, порядок елементів визначається порядком їх додавання у колекцію (або порядком у якому раніше зверталися до елементів), дозволяються null у якості ключа та значень. TreeMap – сортована мапа, порядок сортування також можна задати за допомогою власного компаратора.
  • Черги реалізують колекції з перевизначеним способом додавання та отримання елементів (FIFO), відповідно і сортуються елементи у порядку додавання у чергу. PriorityQueue – елементи впорядковані за пріоритетом, який може бути змінений за допомогою компаратора; не підтримує null у якості елемента.
  • Інтерфейс Queue реалізує також така колекція як LinkedList.
  • Починаючи з Java6 інтерфейс Queue було розширено інтерфейсом Deque, який дозволяє реалізувати стек (LIFO). Імплементацією цього інтерфейсу є ArrayDeque.
  • Колекції можуть зберігати тільки об’єкти, проте підтримується автобоксинг примітивів у відповідні класи-обгортки, тому можна додавати до колекції скажімо int.
  • Існує два способи ітерування (перебору елементів) колекцій: цикл for та використання ітератора.
  • Ітератори мають методи next() та hasNext(). Перший з них повертає наступний елемент колекції та переходить до нього, другий – тільки повертає значення true якщо наступний елемент у колекції існує, але не пересуває сам ітератор.
  • Якщо ви хочете зберігати свої об’єкти у мапі (чи наборі), їм слід коректно перевизначити методи equals() та hashCode().
  • TreeSet і TreeMap дозволяють створювати так звані backed collections наприклад за допомогою методів subSet() та subMap(). Ви можете вказати діапазон значень, які потраплять у зв’язану колекцію і будуть дублюватися там. При зміні елементів однієї з таких зв’язаних колекцій змінюються також елементи і в іншій.

Почитайте ще оце:


Залиште коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

2 thoughts on “Колекції у Java