Ordinea elementelor dintr-o colectie nu este esentiala, dar trebuie sa existe o modalitate de a parcurge toate elementele colectiei pentru a cauta elementul dorit.
Principala deosebire dintre colelctie si structurile de tablou si de inregistrare, deja studiate, consta tocmai in faptul ca numarul de elemente ale colectiei este variabil, in timp ce la tablou si inregistrare este fixat in momentul in care se creeaza structura respectiva. Din aceasta cauza, se mai spune ca tabloul si inregistrarea sunt structuri statice, in timp ce colectiile sunt structuri dinamice.
Iteratorul este un obiect care indica unul din elementele
colectiei si permite sa se efectueze anumite operatii asupra colectiei
in locul in care se gaseste elementul indicat, cum ar fi:
- vizitarea elementului de colectie indicat de iterator;
- eliminarea elementului indicat de iterator (operatie
optionala);
- pozitionarea iteratorului pe elementul urmator
al colectiei.
Denumirea de iterator provine tocmai de la faptul ca acesta poate sa treaca de la un element la altul al colectiei, deci permite aplicarea unor algoritmi iterativi pe colectia respectiva.
Principalele operatii care se fac asupra unei colectii sunt:
- punerea unui nou element in colectie;
- traversarea colectiei, adica parcurgerea colectiei element
dupa element cu posibila "vizitare" a elementului respectiv;
- cautarea unui element intr-o colectie;
- eliminarea unui element din colectie.
In Java, iteratorul este instanta unei clase care implementeaza
interfata java.util.Iterator.
Interfata java.util.Collection contine 15 metode, dintre care
unele sunt obligatorii, iar altele sunt optionale. Daca este invocata una
din metodele optionale corespunzatoare unei operatii nepermise intr-o anumita
clasa de colectii, ea trebuie sa genereze o exceptie din clasa java.lang.UnsupportedOperationException.
Metodele care realizeaza operatii obligatorii pentru toate clasele
care implementeaza interfata Collection sunt urmatoarele:
Metodele care realizeaza operatii optionale pentru clasele care
implementeaza interfata Collection sunt urmatoarele:
Remarcam ca metodele optionale trebuie sa existe in orice clasa care implementeaza interfata Collection, la fel ca cele obligatorii; singura deosebire este ca, daca o anumita operatie optionala nu este permisa intr-o astfel de clasa, ea nu face altceva, decat ca intoarce o UnsupportedOperationException. Interfata java.util.Iterator contine numai trei metode, din care
numai primele doua sunt operatii obligatorii:
Fiecarei clase care implementeaza interfata Collection trebuie sa i se asocieze in mod obligatoriu cel putin o clasa cu interfata Iterator, ale carei instante sunt iteratori pentru colectia respectiva. |
In clasa AbstractCollection sunt definite toate metodele interfetei
Collection, cu urmatoarele exceptii care sunt pastrate ca metode abstracte:
public abstract Iterator iterator() public abstract int size() Celelalte metode sunt implementate, dar cele care corespund unor operatii optionale intorc o UnsupportedOperationException. In consecinta, programatorul care creaza o subclasa cu interfata Collection trebuie sa defineasca numai cele doua metode abstracte specificate mai sus si - daca este cazul - sa redefineasca metodele optionale. In clasa AbstractCollection este, de asemenea redefinita metoda mostenita
de la clasa Object
|