Ноу Інти, лекція, найважливіші об’єктні типи
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.