Bună! În lecția de astăzi, vom vorbi despre Java Iterator. Imaginează-ți că mergi la bibliotecă și vrei să găsești o anumită carte. Cum o faci? Dacă este non-ficțiune, există Sistemul Decimal Dewey. Dacă este ficțiune, sunt sortați în ordine alfabetică după numele de familie. Orice ai căuta, la un moment dat, trebuie să parcurgi cărțile pe rând până când găsești ceea ce cauți. Ori de câte ori aveți o colecție de lucruri în Java, fie că este stocată într-un Array , un ArrayList , o Coadă de așteptare sau o Listă , cum găsiți o anumită valoare? La un moment dat, trebuie să parcurgeți fiecare element pe rând. Pentru asta este un iterator Java.
Ce este un Iterator în Java
Ce este un iterator în Java? Este un mod de a privi fiecare element dintr-o colecție. Și prin colecție, înțelegem orice din clasa Collection . Aceasta include:- ArrayList
- HashSet
- LinkedHashSet
- LinkedList
- PriorityQueue
- Vector
- și multe altele…
De ce nu ar trebui să utilizați For Loops ca iterator în Java
Una dintre primele moduri prin care toată lumea este învățată să itereze printr-o colecție în Java este pentru o buclă. Arata cam asa:class Main {
public static void main(String[] args) {
int exampleArray[] = new int[10];
//fill array with data
for(int x = 0; x < exampleArray.length; x++) {
System.out.println("Content of element " + x + "is: " + exampleArray[x]);
}
}
}
Rezultatul ar fi o listă care va citi:
Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
Acest lucru are utilizările sale, dar ce se întâmplă dacă colecția nu stochează elemente într-un sistem bazat pe index? De exemplu, seturile nu au ordine în mod normal. Așadar, este recomandabil să renunțați la practica utilizării unei bucle for ca iterator în Java și să exersați folosirea clasei Iterator<E> . Iată câteva exemple de iteratoare java.
Cum se utilizează Iterator în Java
Iată câteva exemple de utilizare a iteratorului în Java. Când folosiți clasa iterator, există trei moduri de a parcurge o colecție. Puteți folosi o buclă while() , o buclă for() și o buclă forEach() . Rețineți că această buclă for este diferită de cea despre care am vorbit înainte. Iată cele trei exemple diferite de iterator java. Mai întâi, să setăm colecția pentru a continua.import java.util.*; // imports ArrayList, Collection and Iterator
class Main {
public static void main(String[] args) {
Collection<String> example = new ArrayList<String>();
example.add("Item 1");
example.add("Item 2");
example.add("Item 3");
example.add("Item 4");
}
}
Aceasta este o colecție simplă alcătuită dintr-o ArrayList în care am încărcat patru articole. Acum să ne uităm la cele trei metode de utilizare a clasei Iterator pentru a parcurge ArrayList .
bucla While().
Iterator<String> iterator = example.iterator();
while (iterator.hasNext()) {
System.out.println("Element Value= " + iterator.next());
}
Această buclă while() folosește metoda booleană .hasNext() a clasei Iterator pentru a verifica dacă există un element viitor. Dacă precondiția este adevărată, atunci continuă. Dacă se întoarce ca fals, atunci bucla se termină. Partea cheie aici este că metodele .hasNext() și .next() fac ambele o verificare inițială a primului element. Dacă Colecția este goală și nu există un prim element, atunci metoda returnează false pentru .hasNext() și va arunca o NoSuchElementException pentru metoda .next() .
Pentru buclă
for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
System.out.println("Element Value= " + iterator.next());
}
Aceasta arată ca o buclă for mai tradițională. Folosește metoda .hasNext() ca porțiune de verificare și modificare a stării. Inițializarea este apelul către Iterator.
Pentru: Fiecare buclă
for (String s : example) {
System.out.println("Element Value= " + s);
}
For :Fiecare buclă este o buclă for, dar dacă nu știți cum să o citiți, poate fi puțin confuză. Sintaxa unei bucle For:Each este for (data_type variableName : collectionName){ body} . Acest for:fiecare buclă are câteva dezavantaje. În primul rând, poate traversa colecția doar într-o singură direcție. În al doilea rând, trebuie să iterați prin fiecare element. Nu poți sări peste niciunul dintre ele. Dar, ca iterator de listă convenabil în Java, este cea mai bună opțiune. În plus, bucla for:each este foarte ușor de citit și, odată ce o știi, este dificil să greșești. Dacă vă întrebați care este rezultatul celor trei bucle iteratoare, toate sunt la fel:
Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4
Cum să utilizați un Iterator în Java pentru hărți
Hărțile sunt o modalitate populară de a stoca date, dar deoarece nu extind Colecția , nu puteți folosi iteratoarele anterioare pentru a parcurge direct o hartă. Deci, cum folosiți un iterator în Java pentru a parcurge hărțile și HashMap -urile? Există patru metode bune de iterator de hărți Java. Le vom acoperi individual. Mai întâi, să încărcăm o hartă cu o serie de valori.import java.util.*; //imports Map and HashMap
class Main {
public static void main(String[] args) {
Map<String, String> example = new HashMap<String, String>();
example.put("alpha", "one");
example.put("beta", "two");
example.put("gamma", "three");
}
}
Metoda Java Hashmap Iterator: forEach(action)
example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
Această metodă utilizează o expresie lambda pentru a itera. Operatorul lambda este metoda forEach() , iar corpul imprimă valorile. Aceasta folosește un operator cu mai mulți parametri. Aceasta este cea mai rapidă și mai curată metodă pentru iteratorul de hărți din Java 8.
Metoda Java Hashmap Iterator: For:Each() Loop
for (Map.Entry<String, String> iterate : example.entrySet()) {
System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
Aceasta folosește sintaxa For:Each pentru a apela metoda entrySet() pentru a returna un set care are cheia și valoarea ca elemente. În plus, când se folosește metoda .Entry() , obiectele sunt adevărate numai în timp ce are loc această iterație.
Metoda Java Hashmap Iterator: Map.Entry<k, v>
Iterator<Map.Entry<String, String>> iterator = example.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, String> element = iterator.next();
System.out.println("Key: " + element.getKey() + ", Value: " + element.getValue());
)
Această metodă transformă din nou Harta într-un set pentru a utiliza Iteratorul de colecții și metodele. Pentru aceste trei metode iteratoare, returnarea arată astfel:
Key: alpha, Value: one
Key: beta, Value: two
Key: gamma, Value: three
Java Hashmap Iterator Method: keySet() and values()
for (String key : example.keySet()) {
System.out.println("Key: " + key);
}
for (String value : example.values()) {
System.out.println("Value: " + value);
}
Acesta returnează elementele într-un mod diferit. Mai întâi va returna toate cheile în ordine și apoi toate valorile:
Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three