Site icon Java blog

Java #36: interfejs Iterator

java iterator

Pojęcie iteratora jest ostatnim, które związane jest z kolekcjami. Są one alternatywą dla klasyczny pętli for oraz foreach. Każda z kolekcji Java, która dziedziczy po interfejsie Collection, posiada w swoim API operację o nazwie 'iterator’. Interfejs Iterator jest bardzo prostą strukturą udostępniającą właściwie tylko trzy metody: next, hasNext, oraz remove.

public static void main(String[] args) {
	List<String> movies = new ArrayList<>();
	movies.add("Indiana Jones");
	movies.add("Avengers");
	movies.add("Star Wars");

	Iterator<String> iterator = movies.iterator();
	while (iterator.hasNext()) {
		System.out.println(iterator.next());
	}
}

Przeglądanie rekordów

Iteratory dobrze sprawdzają się wraz z pętlą while, ponieważ warunek stopu tej pętli jest typu boolean, także świetnie można go ustalić korzystając z metody hasNext. W przeciwieństwie pętli for, nie wskazuje się tu numeru indeksu, aby skorzystać z kolejnego wartości na liście. Wystarczy użyć metody next.

Ciekawostka. Jeśli napiszesz taki kod:

while (movies.iterator().hasNext()) {
	System.out.println(movies.iterator().next());
}

To niestety nie zadziała. Wydaje się, że kod jest tożsamy z powyższym, ale w rzeczywistości jest drobnym błędem, ponieważ Iterator będzie otwierał się za każdą iteracją.

Usuwanie elementów

Oprócz przeglądania kolejnych rekordów, interfejs Iterator umożliwia też usuwać rekordy używając metody remove.

while (iterator.hasNext()) {
	iterator.remove();
}

Interfejs iterator po swojemu

Jeśli interesuje Cię, jak samemu napisać własny iterator, przejrzyj tą lekcję: https://developeronthego.pl/java-zaawansowane-4-wlasny-iterator

Link do kodu: https://github.com/developeronthego/java-middle/tree/master/src/main/java/middle/lesson19

Exit mobile version