Ноу Інти, лекція, найважливіші об’єктні типи

7.2. Колекції, списки, ітератори

В Java набули широкого використання колекції (Collections) - "розумні" масиви з динамічно змінною довжиною, що підтримують ряд важливих додаткових операцій в порівнянні з масивами. Базовим для ієрархії колекцій є клас java.util.AbstractCollection. (В загальному випадку клас колекції не зобов'язаний бути нащадком AbstractCollection - він може є будь-яким класом, що реалізує інтерфейс Collection). Основні класи і інтерфейси колекцій:

  • інтерфейси Set, SortedSet; класи HashSet, TreeSet, EnumSet, LinkedHashSet - безлічі (невпорядковані або деяким чином впорядковані набори неповторяющихся елементів);
  • інтерфейс java.util.List; класи java. awt .List, ArrayList. LinkedList, Vector - списки (впорядковані набори елементів, причому елементи можуть повторюватися в різних місцях списку);
  • інтерфейси Map, SortedMap; класи HashMap, HashTable. ConcurrentHashMap, TreeMap, EnumMap, Properties - таблиці (списки пар "ім'я-значення").

Доступ до елементів колекції в загальному випадку не може здійснюватися за індексом, так як не всі колекції підтримують індексацію елементів. Цю функцію здійснюють за допомогою спеціального об'єкта - ітератора (iterator). У кожній колекції collection є свій ітератор який вміє з нею працювати, тому итератор вводять в такий спосіб:

У ітераторів є наступні три методи:

Приклад перетворення масиву в колекцію і цикл з доступом до елементів цієї колекції, здійснюваний за допомогою ітератора:

boolean add (Object obj)

Додавання об'єкта в колекцію (в кінець списку). Повертає true у випадку успішного оновлення - зміни колекції. Колекція може не дозволити додавання елементів несумісного типу або не відповідних по будь-якому іншому ознакою.

boolean addAll (Collection c)

Додавання в колекцію всіх об'єктів з іншої колекції. Повертає true у випадку успішного додавання, тобто якщо доданий хоча б один елемент.

Очищення колекції - видалення з неї посилань на всі вхідні в колекцію об'єкти. При цьому ті об'єкти, на які є посилання у інших елементів програми, не будуть видалені з пам'яті.

boolean contains (Object obj)

Повертає true у випадку, якщо колекція містить об'єкт obj. Перевірка здійснюється за допомогою почергового виклику методу obj.equals (e) для елементів e. що входять в колекцію.

boolean containsAll (Collection c)

Повертає true у випадку, якщо колекція містить всі елементи колекції c.

Повертає true у випадку, якщо колекція порожня, тобто не містить жодного елемента.

Повертає посилання на ітератор - об'єкт, що дозволяє отримувати послідовний доступ до елементів колекції. Для однієї колекції дозволяється мати довільне число об'єктів-ітераторів, в тому числі - різних типів. У процесі роботи вони можуть вказувати на різні елементи колекції. Після створення итератор завжди вказує на початок колекції - виклик його методу next () дає посилання на початковий елемент колекції.

boolean remove (Object obj)

Видаляє з колекції першому зустріти входження об'єкта obj. Пошук і видалення здійснюється за допомогою ітератора. Повертає true у випадку, якщо видалення вдалося, тобто якщо колекція змінилася.

boolean removeAll (Collection c)

Видаляє з колекції все елементи колекції c. Повертає true у випадку, якщо видалення вдалося, тобто якщо колекція змінилася.

boolean retainAll (Collection c)

Залишає в колекції тільки ті з вхідних в неї елементів, які входять в колекцію c.