Вступ до Ітератора на Java

Ітератор - це інтерфейс, який використовується для отримання елементів по одному в колекції. Він доступний у пакеті Java, який називається Java. пакунок util. API колекції реалізує метод iterator (), а отже, дані можуть бути отримані з інтерфейсів, таких як Map, List, Queue, Deque і Set, які реалізовані в рамках колекції. Як випливає з назви, ітератор на Java повторює колекцію об'єктів.

Синтаксис:

Iterator iterator()

Під ітератором знаходиться назва об’єкта, створеного методом виклику інтерфейсу збирання iterator (). "Колекція" - це назва об'єкта колекції.

Iterator iter = collection.iterator();

Методи ітератора на Java

Ітератори мають 4 способи на Java, які використовуються для проходження колекцій та отримання необхідної інформації. Вони такі:

  • hasNext (): Це метод, який повертає булеву істину, якщо в ітерації присутній наступний елемент і булева помилка, якщо наступного немає елемента.
  • next (): Цей метод повертає значення елемента, присутнє в наступній ітерації. Припустимо, що немає елементів, які слід повернути в наступній ітерації, тоді "NoSuchElementException" кидається.
  • delete (): Цей метод видаляє поточний елемент, повернутий ітератором з колекції. У випадку, якщо цей метод викликається попереднім до наступного () методу, він видає "IllegalStateException".
  • forEachRemaining (): Цей метод виконує операцію над усіма елементами, що залишилися в колекції, поки всі вони не будуть оброблені або поки не буде викинуто виняток. Також це метод, який нещодавно представила корпорація Oracle у своєму випуску Java SE 8.

Приклад Iterator в Java

Нижче наводиться приклад Iterator на Java:

Код:

import java.io.*;
import java.util.*;
public class IteratorExample (
public static void main(String() args)
(
ArrayList val = new ArrayList();
val.add("Iteration started");
val.add("Printing iteration1");
val.add("Printing iteration2");
val.add("Printing iteration3");
val.add("End of iteration");
// Iterates through the list
Iterator iter = val.iterator();
System.out.println("The values of iteration are as follows: ");
while (iter.hasNext())
System.out.println(iter.next() + " ");
System.out.println();
)
)

Вихід:

Винятки, закинуті методами ітераторів

У списку елементів ітератор може отримувати інформацію лише про існуючі елементи. Він вийде з ладу або викине виняток, якщо спробувати отримати доступ до елемента, який не присутній у наступній ітерації. Тут ми познайомимось з різними винятками, які ми отримуємо під час впровадження методів ітератора.

1. наступний () метод

Під час ітерації через набір елементів та вилучення їх цим методом може статися наступне виключення.

  • NoSuchElementException: Це відбувається, якщо next () намагається отримати елемент, який не існує в цьому списку. Тому завжди слід використовувати hasNext () перед викликом next ().

2. метод видалення ()

Тут можуть траплятися два винятки:

  • IllegalStateException: Якщо метод delete () викликається перед наступним () методом, тоді цей виняток буде викинуто. Це відбувається тому, що метод намагається видалити елемент, який ще не визначений методом next (), і, отже, не вдається. Щоб вирішити цей виняток, наступний () повинен бути викликаний для посилання на перший елемент, а потім видалення () може бути викликаний, щоб видалити те саме зі списку.
  • UnsupportedOperationException: Цей виняток, як правило, кидається при спробі змінити об'єкт списку шляхом додавання або видалення операції, яка не підтримує модифікацію. Наприклад, коли масив намагається перетворити на список Arrays.asList, викидає цей виняток. Це відбувається тому, що об’єкт List матиме фіксований розмір, оскільки він створюється обгорткою з ArrayList, а значить, модифікація не буде дозволена. Щоб вирішити цю проблему, перетворіть Arrays.asList в об’єкт ArrayList або LinkedList перед виконанням будь-яких операцій, таких як додавання / видалення над тим же самим.

Синтаксис:

//ArrayList is created from the list having fixed size
list = new ArrayList(list);
Iterator iter = list.iterator();
while(iter.hasNext())(
if( iter.next().equals("First iteration") )(
iter.remove();
)
)

Методи ListIterator

Ці методи дозволяють ітератору переходити в обох напрямках об'єкта колекції. Нижче наведено деякі з них:

  • add (): Цей метод вставляє задане значення об'єкта і повертається, коли викликається наступний () метод.
  • hasNext (): Цей метод є таким самим, як той, який згадується у типах ітератора, який повертає булеве значення true / false залежно від того, наступний елемент має значення чи ні.
  • hasPrevious (): Цей метод протилежний hasNext () і повертає булеві значення true, якщо у списку є попередній елемент і навпаки.
  • next (): Цей метод отримує наступний елемент із заданого списку.
  • previous (): Цей метод отримує попередній елемент зі списку.
  • delete (): Це видаляє даний список із списку. Коли цей метод викликається або перед наступною () або попередньою () функцією, він видає "IllegalStateException".

Приклад для ListIterator

Нижче наведено приклад у ArrayList для ListIterator.

Код:

import java.util.*;
public class IteratorExample (
public static void main(String args()) (
// Creating an array list
ArrayList array = new ArrayList();
// add elements to the array list
array.add("First element");
array.add("Second element");
array.add("Third element");
array.add("Fourth element");
array.add("Fifth element");
array.add("Sixth element");
// Displaying elements of an array
System.out.println("Printing input of the array: ");
Iterator iter = array.iterator();
while(iter.hasNext()) (
Object value = iter.next();
System.out.println(value + " ");
)
System.out.println();
// To update the elements of iteration
ListIterator listiter = array.listIterator();
while(listiter.hasNext()) (
Object value = listiter.next();
listiter.set(value + "+");
)
System.out.print("Updated array elements are as follows: ");
iter = array.iterator();
while(iter.hasNext()) (
Object value = iter.next();
System.out.print(value + " ");
)
System.out.println("\n");
// To display the contents in backward direction
System.out.println("Printing elements in backward direction: ");
while(listiter.hasPrevious()) (
Object value = listiter.previous();
System.out.print(value + " ");
)
System.out.println();
)
)

Вихід:

Переваги Ітераторів на Java

Нижче наведено переваги Ітераторів:

  1. Він підтримує всі класи в інтерфейсі Collection.
  2. Методи ітератора досить прості та легкі для розуміння та реалізації.
  3. Елементи колекції можна легко змінювати (додавати / видаляти) за допомогою ітераторів.
  4. Доступ до елементів через Ітератори не призведе до виключень під час роботи.
  5. Обробка даних є ефективною.
  6. Він може повторювати різні змінні одночасно, тримаючи стан ітерації кожної змінної окремо.

Обмеження ітераторів на Java

Нижче наведено обмеження Ітераторів:

  1. Ітератор Java може повторювати лише в одному напрямку, тобто вперед.
  2. Його не можна використовувати для ітерації між двома різними структурами даних одночасно.
  3. Його не можна використовувати для відстеження елемента.
  4. Це не дозволяє модифікувати структуру елемента, що повторюється, оскільки він зберігає його положення.
  5. У деяких випадках це може бути неефективним, якщо проїзд по елементах безпосередньо є більш ефективним.

Висновок

Ітератори - це найбільш часто використовуваний метод для отримання елементів з інтерфейсу колекції. Він називається Universal Java Cursor, оскільки він застосований у всіх класах Collection.

Рекомендована стаття

Це посібник з Iterator на Java. Тут ми обговорюємо методи та приклади Iterator на Java разом з її Обмеженнями та Перевагами. Ви також можете ознайомитися з іншими запропонованими нами статтями, щоб дізнатися більше -

  1. Вступ до сортування купи на Java
  2. Перевизначення в Java (приклади)
  3. Ітератори в C # з перевагами та недоліками
  4. Топ 10 запитань щодо інтерв'ю колекції Java
  5. Киньте проти кидок | Топ 5 відмінностей, які ви повинні знати