Колекції - базові принципи

  1. Група зазвичай має (я б навіть сказав - повинна мати) базовий набір функцій - додати, видалити, пройтися по всьому списку, отримати елемент. Але також виникає необхідність мати додаткові можливості, які є специфічними. Саме цим визначається різноманітність класів колекцій
  2. Група включає об'єкти в переважній більшості випадків однотипних (одного класу). Хоча бувають винятки

базовий функціонал

  1. Набір базових інтерфейсів для нексолькіх типів колекцій
  2. Набір класів для реалізації базових інтерфейсів з різними «споживчими» характеристиками
  3. Набір алгоритмів для роботи з колекціями

базові інтерфейси

В офіційній документації вони все перераховані, але я не буду поки приводити його повністю, напишу поки найважливіші (на мій погляд звичайно). Основна ідея при розгляді цих інтерфейсів має бути така - досить розумні люди розробили список методів, які вкрай важливі для певних типів колекцій - списків, множин, черг і прочая. Список має свої особливості, безліч - свої, чергу - свої. Набір методів для списку і для безлічі буде відрізнятися, тому що ці типи колекцій (список і безліч) мають деякі важливі відмінності. Розглядайте їх як спеціалізовані інструменти - наприклад, для закручування шурупів потрібен шуруповоерт, для бетонних стін - перформатор, для свердління лунки - ледобур. Зауважте, що вони всі мають «одну природу», але кожен має деяку спеціалізацію:

Тобто якщо вам потрібно, щоб колекція володіла такими властивостями - вибирайте клас, який реалізує інтерфейс java.util.List
  • java.util.Set - інтерфейс для зберігання безлічі. На відміну від java.util.List цей інтерфейс як раз не може мати однакові елементи (дивимося методи equals і hashCode в статті Рішення на основі класів) і порядок зберігання елементів у множині може змінюватися при додаванні / видаленні / зміну елемента. Може виникнути питання, навіщо такіая колекція потрібна - це зручно в разі, коли ви створюєте набір унікальних елементів з якоїсь групи елементів
  • java.util.SortedSet - це спадкоємець інтерфейсу java.util.Set і його додатковим функціоналом є автоматичне вибудовування елементів всередині безлічі по порядку. Як цей порядок настоюється, ми поговоримо пізніше.
  • java.util.Queue - інтерфейс пропонує працювати з колекцією як з чергою, тобто колекція має метод для додавання елементів в один кінець і метод для отримання елемента з іншого кінця - тобто справжня черга за принципом FIFO - First In First Out - якщо першим прийшов, то першим і підеш. Для широкого кола завдань така конструкція роботи з колекцією буває досить зручною структурою.
  • java.util.Map - дуже зручна конструкція, яка зберігає дані не у вигляді списку значень, а в вигляді пари ключ-значення. Це дуже затребувана форма, в якій ви отримуєте доступ до значення в колекції по ключу. Наприклад, доступ до даних користувача на сайті може бути здійснений за логіном (по email наприклад). Самих даних може бути досить багато, але для пошуку можна використовувати дуже коротку рядок-ключ.
  • І ще раз скажу найважливіше - колекція дозволяє вам працювати з групою об'єктів і спеціалізація колекції визначається вимогами до самих даних і до тих операцій, які потрібно використовувати при роботі з даними.

    Простий приклад використання колекцій