java iterator learn use iterators java with examples
I den här handledningen kommer vi att lära oss om itteratorer i Java. Vi kommer att ha detaljerad diskussion om Iterator- och ListIterator-gränssnitt i Java:
Vi utforskade allt om Java Collection Framework och dess olika stödgränssnitt och klasser i en av våra tidigare självstudier.
När du har en samling vill du komma åt dess element, lägga till / ta bort eller bearbeta elementen. För att göra all denna bearbetning via ett Java-program, bör du kunna korsa genom samlingen du använder. Det är här iteratorn kommer in i bilden.
Vad du kommer att lära dig:
- Vad är en Java Iterator?
- Slutsats
Vad är en Java Iterator?
I Java är en Iterator en konstruktion som används för att korsa eller gå igenom samlingen.
För att kunna använda en Iterator måste du hämta iteratorobjektet med hjälp av “ iterator () ” metod för samlingsgränssnittet. Java Iterator är ett samlingsramgränssnitt och är en del av paketet “java.util”. Med Java Iterator kan du iterera genom samlingen av objekt.
Java Iterator-gränssnitt ersätter räknaren som användes tidigare för att gå igenom några enkla samlingar som vektorer.
De stora skillnaderna mellan Java Iterator och Enumerator är:
- Betydande förbättringar av metodnamn.
- Du kan ta bort metodelement från samlingen som passeras med en iterator.
I den här handledningen kommer vi att diskutera detaljerna i Iterator-gränssnittet och ListIterator-gränssnittet som är ett dubbelriktat gränssnitt.
Iteratortyper
- Enumerator
- Iterator
- ListIterator
En uppräknare används sällan nu. Därför kommer vi i vår handledningsserie att fokusera på Iterator- och ListIterator-gränssnitt.
Iteratorgränssnitt i Java
Iterator-gränssnittet i Java är en del av samlingsramen i paketet 'java.util' och är en markör som kan användas för att gå igenom objektsamlingen.
Iterator-gränssnittet har följande viktiga egenskaper:
- Iterator-gränssnittet är tillgängligt från Java 1.2-samlingsramen och framåt.
- Den korsar samlingen av objekt en efter en.
- Populärt känt som 'Universal Java Cursor' eftersom det fungerar med alla samlingar.
- Detta gränssnitt stöder 'läs' och 'ta bort' operationer, dvs. du kan ta bort ett element under en iteration med iteratorn.
Allmän representation av Iterator-gränssnittet ges nedan:
Låt oss sedan titta på Iterator-metoderna som anges ovan.
Iteratormetoder
Iterator-gränssnittet stöder följande metoder:
# 1) Nästa ()
Prototyp: E nästa ()
Parametrar: inga parametrar
Returtyp: E -> element
Beskrivning: Returnerar nästa element i samlingen.
Om iteration (samling) inte har fler element, kastar den NoSuchElementException .
# 2) hasNext ()
Prototyp: boolean hasNext ()
Parametrar: NOLL
Returtyp: true => det finns element i samlingen.
Falsk => inga fler element
Beskrivning: Funktionen hasNext () kontrollerar om det finns fler element i samlingen som nås med en iterator. Om det inte finns fler element ringer du inte nästa () -metod. Med andra ord kan denna funktion användas för att avgöra om nästa () metod ska kallas.
# 3) ta bort ()
Prototyp: ogiltig ta bort ()
Parametrar: NOLL
Returtyp: NOLL
Beskrivning: Tar bort det sista elementet som returneras av iteratorn iterera över den underliggande samlingen. Metoden remove () kan bara anropas en gång per nästa () samtal.
Om iteratorn inte stöder borttagning, kastar den UnSupportedOperationException . Det kastar IllegalStateException om nästa metod ännu inte har anropats.
# 4) forEachRemaining ()
Prototyp: ogiltig förEachRemaining (konsument super ÄR > handling)
Parametrar: åtgärd => åtgärd som ska utföras
Returtyp: tomhet
Beskrivning: Utför den angivna åtgärden på vart och ett av de återstående elementen i samlingen tills alla element är uttömda eller åtgärden ger ett undantag. Undantag som kastas av åtgärder sprids till den som ringer.
Om åtgärden är noll, höjer den nullPointerException . Denna funktion är ett nytt tillskott till Iterator-gränssnittet i Java 8.
Java Iterator Exempel
Låt oss implementera ett Java-program för att visa användningen av Iterator-gränssnittet. Följande program skapar en ArrayList av blommor. Sedan får den en iterator med iterator () -metoden i ArrayList. Därefter passeras listan för att visa varje 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() + ' '); } } }
Produktion:
Begränsningar av Iterator-gränssnitt
- Åtgärden för att ersätta ett element eller lägga till ett nytt element kan inte utföras med denna Iterator.
- Iterationen fortsätter bara i en riktning, dvs. framåt.
- Stöder endast sekventiell iteration.
- När stora datamängder ska itereras påverkas Iteratorns prestanda.
Iterator VsIterabel
Även om gränssnitten Iterable och Iterator låter lika, är de helt olika. En klass som implementerar Iterable-gränssnittet får förmågan att itera över klassobjekten som använder iteratorgränssnittet.
Nedan följer några av de viktigaste skillnaderna mellan dessa två gränssnitt som du måste vara medveten om:
Iterabelt gränssnitt | Iteratorgränssnitt |
---|---|
Representerar en samling som kan passeras med foreach-loop. | Tillåter att iterera över någon annan samling. |
Klassen som implementerar det iterabla gränssnittet måste åsidosätta metoden iterator (). | hasNext () och nästa () metoder för Iterator-gränssnittet ska åsidosättas av klass som implementerar det. |
Lagrar inte det aktuella läget. | Lagrar det aktuella iterationsläget. |
En instans av iteratorgränssnittet bör produceras varje gång iterator () -metoden anropas. | Inget sådant kontrakt för iteratorgränssnitt. |
Rör sig bara framåt. | Rör sig framåt och undergränssnitt som listIterator stöd tvåvägs traversering. |
Ger ingen metod för att modifiera elementen under iteration. | Ger borttagningsmetoden som kan ta bort element när iteration pågår. |
ListIterator-gränssnitt i Java
Gränssnittet ListIterator är en delgränssnitt för iteratorgränssnittet. Det fungerar på samlingar av listtyper som länkade listor, arraylistor etc. Detta gränssnitt övervinner alltså bristerna i Iterator-gränssnittet.
De viktigaste egenskaperna för ListIterator-gränssnittet inkluderar:
- ListIterator-gränssnitt utökar Iterator-gränssnittet.
- ListIterator-gränssnitt stöder CRUD-operationer, dvs Skapa, läs, uppdatera och ta bort.
- Stöder iteration både framåt och bakåt.
- Eftersom detta gränssnitt är dubbelriktat placeras markören alltid mellan föregående och nästa element.
- Detta gränssnitt fungerar främst för listimplementeringar som ArrayList, LinkedList, etc.
- Finns sedan Java 1.2
Gränssnittet ListIterator representeras enligt nedan:
Som redan nämnts utökar ListIterator-gränssnittet Iterator-gränssnittet. Bortsett från att stödja alla metoder för iteratorgränssnittet, som visas ovan, har ListIterator-gränssnittet också egna metoder som hjälper det att utföra CRUD-operationer samt dubbelriktad iteration.
Låt oss diskutera ListIterator-metoderna i detalj.
ListIterator Methods
Observera att Iterator-gränssnittsmetoderna, nästa (), hasNext () och remove () fungerar exakt, på samma sätt som ListIterator-gränssnittet. Därför hoppar vi över dessa metoder i det här avsnittet. Förutom de ovan nämnda metoderna har ListIterator följande metoder:
Tidigare()
Prototyp: E föregående ()
Parametrar: NOLL
Returtyp:
E- föregående element i listan.
- 1 - om iteratorn är i början av listan.
Beskrivning: Denna funktion returnerar föregående element i listan. När det föregående elementet returneras flyttas markören bakåt till nästa element.
hasPrevious ()
Prototyp: boolean hasPrevious ()
Parametrar: NOLL
Returtyp: true => iterator har fler element när listan korsas bakåt.
Beskrivning: Denna funktion kontrollerar om ListIterator har fler element bakåt.
previousIndex
Prototyp: int previousIndex ()
Parametrar: NOLL
Returtyp:
int - index för föregående element
- 1 - om pekaren är i början av listan.
Beskrivning: Returnerar index för föregående element som returneras av föregående () samtal.
nästaIndex
Prototyp: int nästaIndex ()
Parametrar: NOLL
Returtyp:
int - nästa index
- 1 - om iteratorn är i slutet av listan.
Beskrivning: Returnerar nästa index för elementet i listan. Detta element returneras genom ett samtal till nästa () -metod.
uppsättning()
Prototyp: ogiltig uppsättning (E och)
Parametrar: e - element som ska bytas ut
Returtyp: NOLL
Beskrivning: Används för att ersätta det sista elementet med det givna elementet e.
Lägg till()
Prototyp: ogiltig läggning (E e)
Parametrar: e - element som ska läggas till
Returtyp: NOLL
Beskrivning: Lägger till nya element i listan på en position före nästa () element.
Lista Iterator Exempel
Nu vet vi vad en ListIterator är och vilka olika metoder som stöds av den. Låt oss fortsätta och implementera ett Java-program för att demonstrera ListIterator.
I det här programmet har vi använt ArrayList. Sedan använder vi ListIterator-metoderna för att korsa listan både framåt och bakåt och visa utgången.
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()+' '); } }
Produktion:
Hittills har vi diskuterat gränssnitten, iterator och Listiterator, nästa kommer vi att se de olika exemplen på att använda dessa gränssnitt för att korsa olika samlingar. Men låt oss först titta på enkla matriser och sedan gå vidare till andra samlingar.
Array Iterator
I Java finns det två sätt att iterera över array-element. Låt oss beskriva sätten med kodexempel.
# 1) för loop
Detta är det enklaste sättet att itera över en matris. Vi använder en enkel loop som ökar indexet för varje iteration och visar dess innehåll.
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 Produktion:

Ovanstående program visar innehållet i arrayen med hjälp av for loop.
# 2) för varje slinga
Detta är det andra sättet att iterera över matriser. Här använder vi en special för loop eller 'forEach' loop. Här slingrar vi genom matrisen för varje element och visar sedan innehållet.
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 + ' '); } } }
Produktion:

ForEach är mer optimerad jämfört med for loop. Det är kortare att skriva och är också snabbare.
ArrayList Iterator
Om du vill gå igenom en ArrayList-samling kan du göra det med hjälp av Iterator-gränssnittet. Eftersom iterator är ett gränssnitt kan du inte starta det direkt. Istället kan du använda ArrayList-samlingens iterator () -metod för att få iteratorn och sedan korsa listan.
Iterator iterator ();
Exempel för att demonstrera 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() + ' '); } }
Produktion:

LinkedList Iterator
Låt oss nu se funktionaliteten hos en iterator i fallet med LinkedList-samling.
LinkedList-samlingen stöder listIterator () -metoden som returnerar listIterator att korsa genom den länkade listan.
Det allmänna formatet för denna funktion är
ListIterator list_iter = LinkedList.listIterator (int index);
Här är indexet ett heltal som anger positionen i den länkade samlingen varifrån korsningen ska börja.
Låt oss förstå listens iterator i den länkade listan med ett exempelprogram. Vi har modifierat samma array iterator-program och ändrat det så att det innehåller en listiterator med LinkedList.
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() + ' '); } }
Produktion:
topprankad gratis programvara för borttagning av skadlig programvara

Java Map / Hashmap Iterator
Karta eller dess variationer som hashmap, treemap etc. är inte samlingar. Därför kan du inte använda iteratormetoden direkt på den. Istället bör du itera över nyckelinmatningsvärdena för att läsa nyckel- / värdeparen.
Även om du kan använda olika metoder som forEach, för loop etc. för att iterera över kartvärden, är det den bästa och effektivaste metoden att använda en iterator för att iterera genom nyckelvärdena. Dessutom kan du också ta bort poster från kartan under iteration med borttagningsmetoden.
Exempel på användning av Iterator med HashMap.
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()); } } }
Produktion:

I programmet ovan har vi definierat en karta med heltalstangenter och värden för strängtyp. Sedan definierar vi en iterator över kartan. Ange och visa nyckel- / värdeparen.
Java Set Iterator
Metoden iterator () för Java.util.set används för att få iteratorn som returnerar elementen i uppsättningen i slumpmässig ordning.
Iterator set_iterator = Set.iterator();
'Set_iterator' itererar över de olika elementen i uppsättningen och returnerar deras värden.
På liknande sätt innehåller hash-uppsättningen också en iteratorfunktion som returnerar en iterator som en set-iterator.
Iterator hashset_iterator = Hash_Set.iterator();
Nedan följer programmeringsexemplet för att demonstrera set iterator.
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()); } } }
Produktion:

Denna implementering använder HashSet iterator och visar enskilda värden genom att itera över HashSet-elementen.
Iterator vs ListIterator
Låt oss tabellisera de viktigaste skillnaderna mellan Iterator- och ListIterator-gränssnitt.
Iterator ListIterator Kan korsa alla samlingar inklusive uppsättning, karta etc. Den kan användas för att endast korsa listtypssamling som ArrayList, LinkedList. Itererar samlingen bara framåt. Kan itera över samlingen både framåt och bakåt. Det går inte att få index. Kan få index. Inget sätt att lägga till nya element i samlingen. Du kan lägga till nya element i samlingen. Iterator kan inte ändra elementen under iteration. ListIterator kan ändra elementen i samlingen med metoden set ().
Vanliga frågor
F # 1) Vad är Iterationen i Java?
Svar: En iteration är en process genom vilken ett kodblock körs upprepade gånger tills ett visst villkor finns eller inte finns. Med iteration kan du gå igenom en sekvens av element eller bearbeta data.
F # 2) Hur många typer av Iteratorer finns det i Java?
Svar: Iteratorer används för att korsa genom samlingarna i Java.
Det finns tre typer av iteratorer i Java:
- Räknare
- Iteratorer
- ListIterators
F # 3) Hur använder jag en Iterator i Java?
Svar: För att använda iteratorn för att korsa genom samlingen måste du först hämta iteratorn med metoden iterator () för den angivna samlingen.
Sedan kan du använda hasNext () och nästa () metoder för iteratorn för att få elementet.
F # 4) Varför används Iterator istället för för loop?
Svar: Både iteratorn såväl som för loop används för att upprepade gånger utföra ett specifikt kodblock. Men den största skillnaden är att i loop kan du inte ändra eller ändra innehållet i samlingen. Även om du försöker ändra det kommer det att kasta concurrentModificationException. Med iterator kan du ta bort ett element från samlingen.
F # 5) Varför behöver vi Iterator i Java?
Svar: Iterator hjälper dig att hämta elementen i samlingen eller en container utan att programmeraren behöver känna till den interna strukturen eller hur samlingen fungerar. De är mer eleganta, förbrukar mindre minne och programmeraren sparas också med att skriva lång kod.
För det andra kan elementen lagras i samlingen på vilket sätt som helst, men med hjälp av en iterator kan programmeraren hämta dem precis som en lista eller någon annan sekvens.
Slutsats
Vi har diskuterat iteratorerna i Java som används med samlingar i denna handledning. Denna kunskap om iteratorer hjälper läsarna att förstå de samlingar som vi ska lära oss i våra efterföljande handledning.
Rekommenderad läsning
- Java-gränssnitt och abstrakt klasshandledning med exempel
- JAVA-handledning för nybörjare: 100+ praktiska Java-videohandledning
- Java-distribution: Skapande och utförande av Java JAR-fil
- Java 'detta' Nyckelord: Handledning med kodexempel
- Java Virtual Machine: Hur JVM hjälper till att köra Java-applikationen
- Åtkomstmodifierare i Java - Handledning med exempel
- Java Reflection Tutorial med exempel
- C ++ vs Java: Topp 30 skillnader mellan C ++ och Java med exempel