java iterator learn use iterators java with examples
U ovom uputstvu naučit ćemo o iteratorima na Javi. Imat ćemo detaljnu raspravu o sučeljima Iterator i ListIterator u Javi:
Istražili smo sve o Java Collection Framework-u i njegovim različitim sučeljima i klasama za podršku u jednom od naših prethodnih vodiča.
Kada imate zbirku, tada želite pristupiti njezinim elementima, dodati / ukloniti ili obraditi elemente. Da biste sve ove procese mogli obaviti putem Java programa, trebali biste moći prelaziti kroz zbirku koju koristite. Ovdje se iterator pojavljuje u slici.
Što ćete naučiti:
- Što je Java Iterator?
- Zaključak
Što je Java Iterator?
U Javi je Iterator konstrukcija koja se koristi za prelazak ili prolazak kroz zbirku.
Da biste koristili Iterator, trebate dobiti objekt iteratora pomoću ' iterator () ' metoda sučelja za prikupljanje. Java Iterator je sučelje okvira za prikupljanje i dio je paketa 'java.util'. Korištenjem Java Iteratora možete se kretati kroz zbirku objekata.
Sučelje Java Iterator zamjenjuje popisivač koji je ranije korišten za prolazak kroz neke jednostavne zbirke poput vektora.
Glavne razlike između Java Iteratora i Enumeratora su:
- Znatno poboljšanje u nazivima metoda.
- Elemente metode možete ukloniti iz zbirke koja se prelazi pomoću iteratora.
U ovom uputstvu razgovarat ćemo o pojedinostima sučelja Iterator i sučelja ListIterator koje je dvosmjerno sučelje.
Vrste iteratora
- Popisivač
- Iterator
- ListIterator
Popisivač se sada rijetko koristi. Stoga ćemo se u našoj seriji tutorijala usredotočiti na sučelja Iterator i ListIterator.
Iteracijsko sučelje u Javi
Sučelje Iterator u Javi dio je okvira Zbirke u paketu 'java.util' i kursor je koji se koristi za koračanje kroz zbirku objekata.
Sučelje Iterator ima sljedeće glavne karakteristike:
- Sučelje Iterator dostupno je od okvira kolekcije Java 1.2 nadalje.
- Prolazi kolekciju predmeta jedan po jedan.
- Popularno poznat kao 'Univerzalni kursor Java', jer radi sa svim kolekcijama.
- Ovo sučelje podržava operacije čitanja i uklanjanja, tj. Možete ukloniti element tijekom iteracije pomoću iteratora.
Općeniti prikaz sučelja iteratora dat je u nastavku:
Zatim, pogledajmo gore navedene metode Iterator.
Iteratorske metode
Sučelje Iterator podržava sljedeće metode:
# 1) Dalje ()
Prototip: Sljedeća ()
Parametri: bez parametara
Tip povrata: E -> element
Opis: Vraća sljedeći element u zbirci.
Ako iteracija (zbirka) nema više elemenata, tada baca NoSuchElementException .
# 2) hasNext ()
Prototip: boolean hasNext ()
Parametri: NULA
Tip povrata: true => u zbirci postoje elementi.
False => nema više elemenata
Opis: Funkcija hasNext () provjerava ima li više elemenata u zbirci kojoj se pristupa pomoću iteratora. Ako više nema elemenata, tada nećete pozvati sljedeću () metodu. Drugim riječima, ova se funkcija može koristiti za odlučivanje hoće li se pozvati sljedeća () metoda.
# 3) ukloni ()
Prototip: ukloni prazninu ()
Parametri: NULA
Tip povrata: NULA
Opis: Uklanja zadnji element koji je iterator vratio u iteraciju preko osnovne zbirke. Metoda remove () može se pozvati samo jednom po sljedećem () pozivu.
Ako iterator ne podržava operaciju uklanjanja, baca UnSupportedOperationException . Baca IllegalStateException ako se sljedeća metoda još ne pozove.
# 4) forEachRemaining ()
Prototip: void forEachRemaining (potrošač super JE > akcija)
Parametri: akcija => radnja koju treba izvršiti
Tip povrata: poništiti
Opis: Izvodi navedenu radnju na svakom od preostalih elemenata zbirke sve dok se svi elementi ne iscrpe ili dok radnja ne izuzme iznimku. Iznimke izbačene akcijom šire se na pozivatelja.
Ako je radnja ništavna, ona se podiže nullPointerException . Ova je funkcija novi dodatak sučelju Iterator u Javi 8.
Primjer Java Iterator
Primijenimo Java program kako bismo demonstrirali upotrebu sučelja Iterator. Sljedeći program stvara ArrayList cvijeća. Tada dobiva iterator koristeći iterator () metodu ArrayList. Nakon toga prelazi se popis da bi se prikazao svaki element.
import java.util.*; public class Main { public static void main(String() args) { List flowers = new ArrayList(); flowers.add('Rose'); flowers.add('Jasmine'); flowers.add('sunflower'); // Get Iterator IteratorflowersIterator = flowers.iterator(); System.out.println('Contents of ArrayList:'); // Traverse elements using iterator while(flowersIterator.hasNext()){ System.out.print(flowersIterator.next() + ' '); } } }
Izlaz:
Ograničenja iteracijskog sučelja
- Operacija zamjene elementa ili dodavanja novog elementa ne može se izvršiti s ovim Iteratorom.
- Ponavljanje se odvija samo u jednom smjeru, tj. Smjeru prema naprijed.
- Podržava samo sekvencijalnu iteraciju.
- Kada treba ponoviti velike količine podataka, to utječe na performanse Iteratora.
Iterator VsIterativ
Iako sučelja Iterable i Iterator zvuče slično, potpuno su različita. Klasa koja implementira Iterable sučelje stječe sposobnost iteracije nad objektima klase koji koriste iterator sučelje.
Slijede neke od glavnih razlika između ova dva sučelja kojih morate biti svjesni:
Iterable sučelje | Iteracijsko sučelje |
---|---|
Predstavlja kolekciju koja se može preći pomoću petlje foreach. | Omogućuje ponavljanje neke druge zbirke. |
Klasa koja implementira iterabilno sučelje mora nadjačati metodu iterator (). | hasNext () i next () metode sučelja Iterator trebaju nadjačati klasa koja ga implementira. |
Ne pohranjuje trenutno stanje. | Pohranjuje trenutno stanje iteracije. |
Primjer sučelja iteratora trebao bi se izraditi svaki put kad se pozove metoda iterator (). | Ne postoji takav ugovor za sučelje iteratora. |
Kreće se samo u smjeru naprijed. | Pomiče se u smjeru naprijed, a podsučelja poput listIterator podržavaju dvosmjerno kretanje. |
Ne pruža nikakvu metodu za izmjenu elemenata tijekom iteracije. | Pruža metodu uklanjanja koja može ukloniti element tijekom ponavljanja. |
ListIterator sučelje u Javi
Sučelje ListIterator je podsučelje sučelja iteratora. Radi na zbirkama vrsta popisa poput Linkedlists, popisa nizova itd. Tako ovo sučelje prevladava nedostatke sučelja Iterator.
Glavne karakteristike sučelja ListIterator uključuju:
- ListIterator sučelje proširuje Iterator sučelje.
- ListIterator sučelje podržava CRUD operacije, tj. Stvaranje, čitanje, ažuriranje i brisanje.
- Podržava iteraciju u smjeru prema naprijed, kao i prema natrag.
- Kako je ovo sučelje dvosmjerno, pokazivač se uvijek postavlja između prethodnog i sljedećeg elementa.
- Ovo sučelje uglavnom radi za implementacije popisa poput ArrayList, LinkedList itd.
- Dostupno od Jave 1.2
Sučelje ListIterator predstavljeno je kako je prikazano u nastavku:
Kao što je već spomenuto, sučelje ListIterator proširuje sučelje Iterator. Stoga, osim što podržava sve metode sučelja iteratora, kao što je prikazano iznad, sučelje ListIterator također ima vlastite metode koje mu pomažu u izvođenju CRUD operacija, kao i dvosmjerne iteracije.
Razmotrimo detaljno metode ListIterator.
Metode ListIteratora
Napominjemo da metode sučelja Iterator, next (), hasNext () i remove (), rade točno na isti način kao i sučelje ListIterator. Stoga ćemo ove metode preskočiti u ovom odjeljku. Uz gore spomenute metode, ListIterator ima i sljedeće metode -
Prethodni ()
Prototip: E prethodna ()
Parametri: NULA
Tip povrata:
E- prethodni element na popisu.
- 1 - ako je iterator na početku popisa.
Opis: Ova funkcija vraća prethodni element na popisu. Nakon što se vrati prethodni element, pokazivač se pomiče unatrag do sljedećeg elementa.
hasPrevious ()
Prototip: boolean hasPrevious ()
Parametri: NULA
Tip povrata: true => iterator ima više elemenata kada se popis premotava unatrag.
Opis: Ova funkcija provjerava ima li ListIterator više elemenata u nazadnom smjeru.
previousIndex
Prototip: int previousIndex ()
Parametri: NULA
Tip povrata:
int - indeks prethodnog elementa
- 1 - ako je pokazivač na početku popisa.
Opis: Vraća indeks prethodnog elementa koji je vraćen prethodnim () pozivom.
nextIndex
Prototip: int nextIndex ()
Parametri: NULA
Tip povrata:
int - sljedeći indeks
- 1 - ako je iterator na kraju popisa.
Opis: Vraća sljedeći indeks elementa s popisa. Ovaj se element vraća pozivom na next () metodu.
postavi ()
Prototip: praznina (E i)
Parametri: e - element koji se zamjenjuje
Tip povrata: NULA
Opis: Koristi se za zamjenu zadnjeg elementa s danim elementom e.
dodati()
Prototip: poništi dodaj (E e)
Parametri: e - element koji se dodaje
Tip povrata: NULA
Opis: Dodaje nove elemente na popis na mjestu prije položaja sljedećeg () elementa.
Primjer Iteratora popisa
Sada znamo što je ListIterator i koje su razne metode koje on podržava. Krenimo i implementiramo Java program za demonstraciju ListIterator.
U ovom smo programu koristili ArrayList. Zatim koristimo metode ListIterator za prelazak popisa u smjeru naprijed kao i unatrag i prikazujemo izlaz.
import java.util.*; class Main { public static void main(String args()) { Listnum_list = new ArrayList(); // Add Elements to ArrayList num_list.add(1); num_list.add(3); num_list.add(5); num_list.add(7); num_list.add(9); // Creatinge a ListIterator ListIteratorlist_it = num_list.listIterator(); System.out.println('Output using forward iteration:'); while (list_it.hasNext()) System.out.print(list_it.next()+' ') ; System.out.print('
Output using backward iteration:
') ; while (list_it.hasPrevious()) System.out.print(list_it.previous()+' '); } }
Izlaz:
Do sada smo razgovarali o sučeljima, iteratoru i Listiteratoru, zatim ćemo vidjeti razne primjere korištenja ovih sučelja za prelazak različitih kolekcija. Ali prvo, pogledajmo putovanje jednostavnim nizovima, a zatim prijeđimo na druge zbirke.
Iterator niza
U Javi postoje dva načina za prelazak preko elemenata niza. Opišimo načine pomoću primjera koda.
# 1) za petlju
Ovo je najjednostavniji način ponavljanja niza. Koristimo jednostavnu petlju for koja će povećavati indeks sa svakom iteracijom i prikazivati njegov sadržaj.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for loop:'); for (int i = 0; i Izlaz:

Gornji program prikazuje sadržaj niza pomoću petlje for.
# 2) forEach petlja
Ovo je drugi način ponavljanja nizova. Ovdje koristimo specijaliziranu petlju for ili „forEach“. Ovdje prolazimo kroz niz za svaki element, a zatim prikazujemo sadržaj.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for each loop:'); for (int i :myArray) { // accessing each element of array num = i; System.out.print(num + ' '); } } }
Izlaz:

ForEach je optimiziraniji u odnosu na for loop. Kraće je za tipkanje, a brže je.
ArrayList Iterator
U slučaju da želite prelaziti kroz kolekciju ArrayList, to možete učiniti pomoću sučelja Iterator. Kako je iterator sučelje, ne možete ga izravno izraditi. Umjesto toga, možete upotrijebiti metodu iteratora () ArrayList da biste dobili iterator i zatim prešli popis.
Iterator iterator ();
Primjer za demonstraciju ArrayList Iterator.
import java.util.*; public class Main { public static void main(String() args) { ArrayListmyList = new ArrayList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); Iteratorlist_it = myList.iterator(); System.out.println('Elements in the arrayList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
Izlaz:

LinkedList Iterator
Sada da vidimo funkcionalnost iteratora u slučaju LinkedList kolekcije.
Kolekcija LinkedList podržava metodu listIterator () koja vraća listIterator za prolazak kroz povezani popis.
Općeniti format ove funkcije je
ListIterator list_iter = LinkedList.listIterator (int indeks);
Ovdje je indeks cijela vrijednost koja određuje položaj u zbirci povezanih popisa odakle bi kretanje trebalo započeti.
Razumijemo iterator popisa na povezanom popisu s uzorkom programa. Izmijenili smo isti program iteratora niza i promijenili ga tako da sadrži listiterator s LinkedListom.
import java.util.*; public class Main { public static void main(String() args) { LinkedListmyList = new LinkedList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); ListIteratorlist_it = myList.listIterator(0); System.out.println('Elements in the LinkedList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
Izlaz:
java programi intervjua i odgovori za iskusne

Java Map / Hashmap Iterator
Karta ili njene varijacije poput hashmape, treemap, itd. Nisu zbirke. Stoga na njemu ne možete izravno koristiti metodu iteratora. Umjesto toga, trebali biste prelistavati vrijednosti unosa ključa da biste pročitali parove ključ / vrijednost.
Iako možete koristiti razne metode poput forEach, for loop itd. Za itiriranje vrijednosti karte, upotreba iteratora za iteriranje ključnih vrijednosti najbolja je i najučinkovitija metoda. Uz to, također možete ukloniti unose s karte tijekom iteracije metodom uklanjanja.
Primjer korištenja Iteratora s HashMapom.
import java.util.*; class Main { public static void main(String() arg) { MapmyMap = new HashMap(); // enter name/url pair myMap.put(1, 'India'); myMap.put(2, 'Nepal'); myMap.put(3, 'Maldives'); myMap.put(4, 'SriLanka'); System.out.println(' SAARC Member Countries '); System.out.println(' KEY' + ' ' + ' COUNTRY' ); // using iterators Iteratormap_itr = myMap.entrySet().iterator(); while(map_itr.hasNext()) { Map.Entrymap_entry = map_itr.next(); System.out.println(' ' + map_entry.getKey() + ' ' + map_entry.getValue()); } } }
Izlaz:

U gornjem programu definirali smo mapu s cjelobrojnim ključevima i vrijednostima tipa stringa. Zatim definiramo iterator preko karte. Unesite i prikažite parove ključ / vrijednost.
Java Set Iterator
Metoda iterator () Java.util.set koristi se za dobivanje iteratora koji vraća elemente u skupu slučajnim redoslijedom.
Iterator set_iterator = Set.iterator();
'Set_iterator' prevlači različite elemente skupa i vraća njihove vrijednosti.
Na sličan način, hash set također sadrži funkciju iteratora koja vraća iterator poput iteratora skupa.
Iterator hashset_iterator = Hash_Set.iterator();
Dolje je dat primjer programiranja za demonstraciju postavljenog iteratora.
import java.util.*; public class Main { public static void main(String args()) { HashSetsports_set = new HashSet(); sports_set.add('Hocky'); sports_set.add('Kabaddi'); sports_set.add('Football'); sports_set.add('Badminton'); sports_set.add('Cricket'); System.out.println('Sports HashSet: ' + sports_set); // Creating an iterator Iterator hashset_iter = sports_set.iterator(); // Displaying the values after iterating through the set System.out.println('
SportsSet iterator values:'); while (hashset_iter.hasNext()) { System.out.println(hashset_iter.next()); } } }
Izlaz:

Ova implementacija koristi HashSet iterator i prikazuje pojedinačne vrijednosti ponavljanjem elemenata HashSet.
Iterator vs ListIterator
Tabularizirajmo glavne razlike između sučelja Iterator i ListIterator.
Iterator ListIterator Može prelaziti sve kolekcije, uključujući set, mapu itd. Može se koristiti za prelazak samo kolekcije vrsta popisa poput ArrayList, LinkedList. Interakcija kolekcije odvija se samo u smjeru naprijed. Može prelaziti preko zbirke u smjeru naprijed, kao i natrag. Nije moguće dobiti indekse. Može dobiti indekse. Nikako da dodate nove elemente u kolekciju. U zbirku možete dodati nove elemente. Iterator ne može mijenjati elemente tijekom iteracije. ListIterator može mijenjati elemente u zbirci pomoću metode set ().
Često postavljana pitanja
P # 1) Što je iteracija u Javi?
Odgovor: Iteracija je postupak kojim se blok koda više puta izvodi dok zadani uvjet ne zadrži ili ne postoji. Korištenjem iteracije možete prelaziti kroz niz elemenata ili obrađivati podatke.
P # 2) Koliko vrsta iteratora postoji na Javi?
Odgovor: Iteratori se koriste za prolazak kroz zbirke na Javi.
U Javi postoje tri vrste iteratora:
- Popisivači
- Iteratore
- ListIterators
P # 3) Kako mogu koristiti Iterator u Javi?
Odgovor: Da biste koristili iterator za prelazak kroz zbirku, prvo morate nabaviti iterator metodom iterator () navedene zbirke.
Tada možete koristiti metode hasNext () i next () iteratora da biste dobili element.
P # 4) Zašto se Iterator koristi umjesto for loop?
Odgovor: I iterator kao i for petlja koriste se za opetovano izvršavanje određenog bloka koda. Ali glavna je razlika u tome što u petlji for ne možete mijenjati ili mijenjati sadržaj zbirke. Čak i ako ga pokušate izmijeniti, izbacit će concurrentModificationException. Pomoću iteratora možete ukloniti element iz zbirke.
P # 5) Zašto nam je potreban Iterator u Javi?
Odgovor: Iterator vam pomaže da dohvatite elemente u zbirci ili spremniku, a da programer ne mora znati unutarnju strukturu ili rad zbirke. Oni su elegantniji, troše manje memorije, a također je i programer pošteđen pisanja dugotrajnog koda.
Drugo, elementi se mogu pohraniti u zbirku na bilo koji način, ali pomoću iteratora programer ih može dohvatiti baš poput popisa ili bilo kojeg drugog slijeda.
Zaključak
U ovom smo tutorijalu raspravljali o iteratorima na Javi koji se koriste sa zbirkama. Ovo znanje iteratora pomoći će čitateljima da shvate zbirke koje ćemo naučiti u našim slijedećim vodičima.
Preporučena literatura
- Java sučelje i udžbenik klase sažetak sa primjerima
- JAVA Tutorial za početnike: 100+ praktičnih Java Video tutorijala
- Implementacija Jave: Izrada i izvršavanje Java JAR datoteke
- Java 'this' ključna riječ: Vodič sa primjerima koda
- Java virtualni stroj: kako JVM pomaže u pokretanju Java aplikacije
- Pristupiti modifikatorima u Javi - Vodič s primjerima
- Java Vodič za refleksiju s primjerima
- C ++ Vs Java: Top 30 razlika između C ++ i Jave s primjerima