Jaka jest różnica między Iterator a ListIterator w Javie?

W programowaniu w Javie, iteratory to mechanizmy umożliwiające sekwencyjne przeglądanie elementów kolekcji. W bibliotece standardowej Javy znajdują się różne interfejsy iteratorów, ale dwa z najbardziej podstawowych to Iterator i ListIterator. Oba te interfejsy są używane do różnych celów i mają różne możliwości.

Iterator

Interfejs Iterator zapewnia podstawową funkcjonalność do przeglądania elementów kolekcji. Umożliwia realizację operacji takich jak:

  • Sprawdzanie, czy w kolekcji jest więcej elementów.
  • Pobieranie kolejnych elementów.
  • Usuwanie elementów podczas iteracji.

ListIterator

ListIterator jest rozszerzeniem interfejsu Iterator i jest specyficzny dla list, czyli klas implementujących interfejs List jak ArrayList czy LinkedList. ListIterator oferuje rozszerzoną funkcjonalność:

  • Iterację w obie strony (do przodu i do tyłu).
  • Pobieranie indeksu bieżącego elementu.
  • Zastępowanie elementów.
  • Dodawanie elementów w trakcie iteracji.

Przykład kodu w Javie

Poniżej przedstawiono przykład użycia Iterator i ListIterator w Javie, demonstrując ich różnice i możliwości.

import java.util.*;

public class IteratorVsListIterator {
    public static void main(String[] args) {
        // Utworzenie listy z elementami
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");

        // Użycie Iteratora do wyświetlenia elementów
        Iterator<String> iterator = fruits.iterator();
        System.out.println("Wyświetlenie elementów za pomocą Iteratora:");
        while (iterator.hasNext()) {
            String fruit = iterator.next();
            System.out.println(fruit); // Wyświetla kolejne owoce
        }

        // Użycie ListIteratora do wyświetlenia i modyfikacji listy
        ListIterator<String> listIterator = fruits.listIterator();
        System.out.println("\nModyfikacja listy za pomocą ListIteratora:");
        while (listIterator.hasNext()) {
            String fruit = listIterator.next();
            if (fruit.equals("Banana")) {
                // Zastąpienie elementu
                listIterator.set("Orange"); // Zastępuje "Banana" "Orange"
            }
            if (fruit.equals("Cherry")) {
                // Dodanie elementu przed "Cherry"
                listIterator.add("Strawberry"); // Dodaje "Strawberry"
            }
        }

        // Ponowne wyświetlenie listy po modyfikacji
        System.out.println("Lista po modyfikacji:");
        for (String fruit : fruits) {
            System.out.println(fruit); // Wyświetla zaktualizowaną listę
        }
    }
}

Podsumowanie

Iterator i ListIterator są oboma przydatnymi narzędziami w Javie, które służą do iterowania przez kolekcje. Iterator jest bardziej ogólny, podczas gdy ListIterator oferuje więcej funkcjonalności, takich jak iteracja dwukierunkowa, dodawanie i modyfikacja elementów listy. Wybór odpowiedniego iteratora zależy od konkretnych potrzeb i rodzaju kolekcji, którą manipulujemy.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top