java iterator learn use iterators java with examples
У цьому посібнику ми дізнаємося про ітератори в Java. Ми будемо детально обговорювати інтерфейси Iterator та ListIterator на Java:
Ми вивчили все про Java Collection Framework та різноманітні підтримуючі інтерфейси та класи в одному з наших попередніх підручників.
Коли у вас є колекція, ви хочете отримати доступ до її елементів, додати / видалити або обробити елементи. Для того, щоб виконати всю цю обробку за допомогою програми Java, ви повинні мати можливість пройти колекцію, яку ви використовуєте. Тут ітератор з’являється у зображенні.
Що ви дізнаєтесь:
- Що таке ітератор Java?
- Висновок
Що таке ітератор Java?
У Java ітератор - це конструкція, яка використовується для обходу або проходження колекції.
Для того, щоб використовувати ітератор, вам потрібно отримати об'єкт ітератора, використовуючи “ ітератор () ” метод інтерфейсу колекції. Java Iterator - це інтерфейс фреймворку колекції та є частиною пакету “java.util”. За допомогою Java Iterator ви можете переглядати колекцію об'єктів.
Інтерфейс Java Iterator замінює перечислювач, який використовувався раніше для перебору деяких простих колекцій, таких як вектори.
Основні відмінності між Java Iterator та Enumerator:
- Значне поліпшення назв методів.
- Ви можете видалити елементи методу з колекції, що обробляється за допомогою ітератора.
У цьому посібнику ми обговоримо деталі інтерфейсу Iterator та інтерфейсу ListIterator, який є двонаправленим інтерфейсом.
Типи ітераторів
- Перелічувач
- Ітератор
- ListIterator
Зараз перелічувач використовується рідко. Отже, у нашому підручнику ми зосередимось на інтерфейсах Iterator та ListIterator.
Інтерфейс ітератора в Java
Інтерфейс Iterator на Java є частиною фреймворку Collections у пакеті «java.util» і являє собою курсор, за допомогою якого можна переходити до колекції об’єктів.
Інтерфейс Iterator має такі основні характеристики:
- Інтерфейс Iterator доступний на основі колекції Java 1.2 і далі.
- Він проходить колекцію предметів по одному.
- У народі відомий як 'Універсальний курсор Java', оскільки він працює з усіма колекціями.
- Цей інтерфейс підтримує операції 'читання' та 'видалення', тобто ви можете видалити елемент під час ітерації за допомогою ітератора.
Загальне подання інтерфейсу ітератора подано нижче:
Далі, давайте розглянемо перелічені вище методи ітератора.
Методи ітератора
Інтерфейс Iterator підтримує такі методи:
# 1) Далі ()
Прототип: E наступна ()
Параметри: відсутні параметри
Тип повернення: E -> елемент
Опис: Повертає наступний елемент у колекції.
Якщо ітерація (колекція) не має більше елементів, тоді вона кидає NoSuchElementException .
# 2) hasNext ()
Прототип: логічний hasNext ()
Параметри: НІЛ
Тип повернення: true => у колекції є елементи.
False => більше немає елементів
Опис: Функція hasNext () перевіряє, чи є в колекції більше елементів, до яких здійснюється доступ за допомогою ітератора. Якщо елементів більше немає, тоді ви не викликаєте метод next (). Іншими словами, за допомогою цієї функції можна вирішити, чи слід викликати метод next ().
# 3) видалити ()
Прототип: void remove ()
Параметри: НІЛ
Тип повернення: НІЛ
Опис: Видаляє останній елемент, повернутий ітератором, що ітерацію над базовою колекцією. Метод remove () можна викликати лише один раз за наступний () виклик.
Якщо ітератор не підтримує операцію видалення, він видає UnSupportedOperationException . Це кидає IllegalStateException якщо наступний метод ще не викликаний.
# 4) forEachRemaining ()
Прототип: void forEachRemaining (споживач super Є > дія)
Параметри: дія => дія, яку потрібно виконати
Тип повернення: порожнеча
Опис: Виконує зазначену дію з кожним із решти елементів колекції, поки всі елементи не будуть вичерпані або дія не видасть виняток. Винятки, викликані дією, передаються абоненту.
Якщо дія нульова, тоді вона підвищується nullPointerException . Ця функція є новим доповненням до інтерфейсу Iterator в Java 8.
Приклад Java Iterator
Давайте реалізуємо програму Java, щоб продемонструвати використання інтерфейсу Iterator. Наступна програма створює ArrayList квітів. Потім він отримує ітератор, використовуючи метод iterator () методу ArrayList. Після цього здійснюється обхід списку для відображення кожного елемента.
import java.util.*; public class Main { public static void main(String() args) { List flowers = new ArrayList(); flowers.add('Rose'); flowers.add('Jasmine'); flowers.add('sunflower'); // Get Iterator IteratorflowersIterator = flowers.iterator(); System.out.println('Contents of ArrayList:'); // Traverse elements using iterator while(flowersIterator.hasNext()){ System.out.print(flowersIterator.next() + ' '); } } }
Вихід:
Обмеження інтерфейсу ітератора
- Операція із заміни елемента або додавання нового елемента не може бути виконана за допомогою цього ітератора.
- Ітерація триває лише в одному напрямку, тобто прямому напрямку.
- Підтримує лише послідовну ітерацію.
- Коли потрібно повторити великі обсяги даних, це впливає на продуктивність Ітератора.
Ітератор протиМожна їсти
Хоча інтерфейси Iterable та Iterator звучать схоже, вони абсолютно різні. Клас, який реалізує інтерфейс Iterable, набуває можливості ітерації над об'єктами класу, що використовують інтерфейс ітератора.
Нижче наведено деякі основні відмінності між цими двома інтерфейсами, про які ви повинні знати:
Ітерабельний інтерфейс | Інтерфейс ітератора |
---|---|
Представляє колекцію, яку можна пройти за допомогою циклу foreach. | Дозволяє виконати ітерацію щодо іншої колекції. |
Клас, що реалізує інтерфейс, що ітерацію, повинен замінити метод iterator (). | Методи hasNext () і next () інтерфейсу Iterator повинні бути замінені класом, який його реалізує. |
Не зберігає поточний стан. | Зберігає поточний стан ітерації. |
Екземпляр інтерфейсу ітератора повинен створюватися кожного разу, коли викликається метод iterator (). | Немає такого контракту на інтерфейс ітератора. |
Рухається лише в прямому напрямку. | Рухається у прямому напрямку, а підінтерфейси, як listIterator, підтримують двонаправлене обхідне. |
Не передбачає жодного методу модифікації елементів під час ітерації. | Надає метод видалення, який може видалити елемент під час ітерації. |
Інтерфейс ListIterator в Java
Інтерфейс ListIterator - це підінтерфейс інтерфейсу ітератора. Він працює з колекціями типів списків, такими як Linkedlists, списки масивів тощо. Таким чином, цей інтерфейс долає недоліки інтерфейсу Iterator.
Основні характеристики інтерфейсу ListIterator включають:
- Інтерфейс ListIterator розширює інтерфейс Iterator.
- Інтерфейс ListIterator підтримує CRUD-операції, тобто створення, читання, оновлення та видалення.
- Підтримує ітерацію вперед та назад.
- Оскільки цей інтерфейс є двонаправленим, курсор завжди розташовується між попереднім і наступним елементами.
- Цей інтерфейс в основному працює для реалізацій списків, таких як ArrayList, LinkedList тощо.
- Доступно з Java 1.2
Інтерфейс ListIterator представлений, як показано нижче:
Як уже зазначалося, інтерфейс ListIterator розширює інтерфейс Iterator. Таким чином, окрім підтримки всіх методів інтерфейсу ітератора, як показано вище, інтерфейс ListIterator також має власні методи, які допомагають йому виконувати CRUD-операції, а також двонаправлену ітерацію.
Давайте детально обговоримо методи ListIterator.
Методи ListIterator
Зверніть увагу, що методи інтерфейсу Iterator, next (), hasNext () і remove (), працюють точно так само, як і інтерфейс ListIterator. Отже, ми пропустимо ці методи в цьому розділі. На додаток до вищезазначених методів, ListIterator має наступні методи -
Попередній()
Прототип: E попередній ()
Параметри: НІЛ
Тип повернення:
E - попередній елемент у списку.
- 1 - якщо ітератор знаходиться на початку списку.
Опис: Ця функція повертає попередній елемент у списку. Після повернення попереднього елемента курсор переміщується назад до наступного елемента.
hasPrevious ()
Прототип: boolean hasPrevious ()
Параметри: НІЛ
Тип повернення: true => ітератор має більше елементів, коли список обертається назад.
Опис: Ця функція перевіряє, чи ListIterator містить більше елементів у зворотному напрямку.
попереднійІндекс
Прототип: int previousIndex ()
Параметри: НІЛ
Тип повернення:
int - індекс попереднього елемента
- 1 - якщо вказівник знаходиться на початку списку.
Опис: Повертає індекс попереднього елемента, який повертається попереднім () викликом.
nextIndex
Прототип: int nextIndex ()
Параметри: НІЛ
Тип повернення:
int - наступний індекс
- 1 - якщо ітератор знаходиться в кінці списку.
Опис: Повертає наступний індекс елемента у списку. Цей елемент повертається за допомогою виклику методу next ().
set ()
Прототип: порожній набір (E та)
Параметри: e - елемент, що підлягає заміні
Тип повернення: НІЛ
Опис: Використовується для заміни останнього елемента даним елементом e.
add ()
Прототип: void add (E e)
Параметри: e - елемент, який потрібно додати
Тип повернення: НІЛ
Опис: Додає нові елементи до списку в позиції перед елементом next ().
Приклад ітератора списку
Тепер ми знаємо, що таке ListIterator і які різні методи підтримуються ним. Давайте продовжимо і впровадимо програму Java для демонстрації ListIterator.
У цій програмі ми використовували ArrayList. Потім ми використовуємо методи ListIterator для обходу списку в прямому та зворотному напрямках та відображаємо вихідні дані.
import java.util.*; class Main { public static void main(String args()) { Listnum_list = new ArrayList(); // Add Elements to ArrayList num_list.add(1); num_list.add(3); num_list.add(5); num_list.add(7); num_list.add(9); // Creatinge a ListIterator ListIteratorlist_it = num_list.listIterator(); System.out.println('Output using forward iteration:'); while (list_it.hasNext()) System.out.print(list_it.next()+' ') ; System.out.print('
Output using backward iteration:
') ; while (list_it.hasPrevious()) System.out.print(list_it.previous()+' '); } }
Вихід:
Дотепер ми обговорювали інтерфейси, ітератор та Listiterator, далі ми побачимо різні приклади використання цих інтерфейсів для обходу різних колекцій. Але спочатку розглянемо обхід простих масивів, а потім перейдемо до інших колекцій.
Ітератор масиву
У Java існує два способи перебору елементів масиву. Опишемо способи на прикладах коду.
# 1) для циклу
Це найпростіший спосіб ітерації масиву. Ми використовуємо простий цикл for, який буде збільшувати індекс з кожною ітерацією та відображати його вміст.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for loop:'); for (int i = 0; i Вихід:

Наведена вище програма відображає вміст масиву за допомогою циклу for.
# 2) forEach loop
Це другий спосіб ітерації масивів. Тут ми використовуємо спеціалізований цикл for або ‘forEach’. Тут ми прокручуємо масив для кожного елемента, а потім відображаємо вміст.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for each loop:'); for (int i :myArray) { // accessing each element of array num = i; System.out.print(num + ' '); } } }
Вихід:

ForEach є більш оптимізованим у порівнянні з циклом for. Він коротший для набору тексту і швидший.
Ітератор ArrayList
Якщо ви хочете пройти колекцію ArrayList, ви можете зробити це за допомогою інтерфейсу Iterator. Оскільки ітератор - це інтерфейс, ви не можете його створити безпосередньо. Натомість ви можете скористатися методом ітератора () колекції ArrayList, щоб отримати ітератор, а потім пройти по списку.
Ітератор ітератора ();
Приклад для демонстрації ітератора ArrayList.
import java.util.*; public class Main { public static void main(String() args) { ArrayListmyList = new ArrayList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); Iteratorlist_it = myList.iterator(); System.out.println('Elements in the arrayList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
Вихід:

Ітератор LinkedList
Тепер давайте побачимо функціональність ітератора у випадку колекції LinkedList.
Колекція LinkedList підтримує метод listIterator (), який повертає listIterator для обходу зв’язаного списку.
Загальним форматом цієї функції є
ListIterator list_iter = LinkedList.listIterator (індекс int);
Тут індекс - це ціле значення, яке вказує позицію в колекції зв'язаних списків, звідки має розпочатися обхід.
Давайте зрозуміємо ітератор списку у зв’язаному списку із зразком програми. Ми змінили ту саму програму-ітератор масиву і змінили її, щоб містити списку літераторів з LinkedList.
import java.util.*; public class Main { public static void main(String() args) { LinkedListmyList = new LinkedList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); ListIteratorlist_it = myList.listIterator(0); System.out.println('Elements in the LinkedList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
Вихід:
як написати css селектор в селені -

Java Map / Hashmap Iterator
Карта або її варіанти, такі як хеш-карта, деревоподібна карта тощо, не є колекціями. Отже, ви не можете безпосередньо використовувати на ньому метод ітератора. Натомість вам слід переглядати значення введення ключа, щоб прочитати пари ключ / значення.
Хоча ви можете використовувати різні методи, такі як forEach, for loop тощо, щоб перебирати значення карт, використання ітератора для перебору ключових значень є найкращим та ефективним методом. Крім того, ви також можете видалити записи з карти під час ітерації, використовуючи метод видалення.
Приклад використання ітератора з HashMap.
import java.util.*; class Main { public static void main(String() arg) { MapmyMap = new HashMap(); // enter name/url pair myMap.put(1, 'India'); myMap.put(2, 'Nepal'); myMap.put(3, 'Maldives'); myMap.put(4, 'SriLanka'); System.out.println(' SAARC Member Countries '); System.out.println(' KEY' + ' ' + ' COUNTRY' ); // using iterators Iteratormap_itr = myMap.entrySet().iterator(); while(map_itr.hasNext()) { Map.Entrymap_entry = map_itr.next(); System.out.println(' ' + map_entry.getKey() + ' ' + map_entry.getValue()); } } }
Вихід:

У наведеній вище програмі ми визначили карту із цілочисельними ключами та значеннями типів рядків. Потім ми визначаємо ітератор над картою. Введення та відображення пар ключ / значення.
Java Set Iterator
Метод iterator () Java.util.set використовується для отримання ітератора, який повертає елементи у наборі в довільному порядку.
Iterator set_iterator = Set.iterator();
“Set_iterator” перебирає різні елементи набору і повертає їх значення.
Подібним чином хеш-набір також містить функцію ітератора, яка повертає ітератор, як ітератор набору.
Iterator hashset_iterator = Hash_Set.iterator();
Нижче наведено приклад програмування для демонстрації встановленого ітератора.
import java.util.*; public class Main { public static void main(String args()) { HashSetsports_set = new HashSet(); sports_set.add('Hocky'); sports_set.add('Kabaddi'); sports_set.add('Football'); sports_set.add('Badminton'); sports_set.add('Cricket'); System.out.println('Sports HashSet: ' + sports_set); // Creating an iterator Iterator hashset_iter = sports_set.iterator(); // Displaying the values after iterating through the set System.out.println('
SportsSet iterator values:'); while (hashset_iter.hasNext()) { System.out.println(hashset_iter.next()); } } }
Вихід:

Ця реалізація використовує Ітератор HashSet і відображає окремі значення шляхом перебору елементів HashSet.
Ітератор проти ListIterator
Давайте розкладемо основні відмінності між інтерфейсами Iterator та ListIterator.
Ітератор ListIterator Може обходити всі колекції, включаючи набір, карту тощо. Він може використовуватися для обходу лише колекції типів списків, таких як ArrayList, LinkedList. Взаємодіє з колекцією лише вперед. Може перебирати колекцію вперед, а також назад. Не вдається отримати індекси. Може отримати індекси. Неможливо додати нові елементи до колекції. Ви можете додавати нові елементи до колекції. Ітератор не може змінювати елементи під час ітерації. ListIterator може змінювати елементи колекції за допомогою методу set ().
Часті запитання
Q # 1) Що таке ітерація в Java?
Відповідь: Ітерація - це процес, за допомогою якого блок коду багаторазово виконується, доки задана умова не виконується або не існує. За допомогою ітерації ви можете пройти через послідовність елементів або обробити дані.
Q # 2) Скільки типів ітераторів є в Java?
Відповідь: Ітератори використовуються для обходу колекцій на Java.
У Java існує три типи ітераторів:
- Перелічувачі
- Ітератори
- ListIterators
Запитання №3) Як використовувати ітератор на Java?
Відповідь: Для того, щоб використовувати ітератор для обходу колекції, спочатку вам потрібно отримати ітератор, використовуючи метод iterator () зазначеної колекції.
Тоді ви можете скористатися методами hasNext () і next () ітератора, щоб отримати елемент.
Q # 4) Чому Iterator використовується замість циклу for?
Відповідь: І ітератор, і цикл for використовуються для багаторазового виконання певного кодового блоку. Але головна відмінність полягає в тому, що в циклі for ви не можете змінювати або модифікувати вміст колекції. Навіть якщо ви спробуєте змінити його, він викличе concurrentModificationException. За допомогою ітератора ви можете видалити елемент із колекції.
Q # 5) Навіщо нам потрібен Iterator у Java?
Відповідь: Iterator допомагає отримати елементи в колекції або контейнері, не вимагаючи, щоб програміст знав внутрішню структуру або роботу колекції. Вони витонченіші, споживають менше пам'яті, а також програміст не шкодує написання довгого коду.
По-друге, елементи можна зберігати в колекції будь-яким способом, але за допомогою ітератора програміст може отримати їх так само, як список або будь-яку іншу послідовність.
Висновок
Ми обговорили ітератори на Java, які використовуються з колекціями в цьому посібнику. Це знання ітераторів допоможе читачам зрозуміти колекції, які ми збираємось вивчати в наступних навчальних посібниках.
Рекомендована література
- Інтерфейс Java та підручник з абстрактних класів із прикладами
- Підручник JAVA для початківців: 100+ практичних навчальних посібників Java
- Розгортання Java: створення та виконання файлу Java JAR
- Ключове слово Java 'this': Підручник із прикладами коду
- Віртуальна машина Java: як JVM допомагає у запуску програми Java
- Модифікатори доступу в Java - Підручник із прикладами
- Підручник з роздумів про Java з прикладами
- C ++ проти Java: 30 найкращих відмінностей між C ++ та Java на прикладах