java iterator learn use iterators java with examples
V tomto výučbe sa dozvieme niečo o iterátoroch v Jave. Budeme viesť podrobnú diskusiu o rozhraniach Iterator a ListIterator v Jave:
V jednom z našich predchádzajúcich tutoriálov sme preskúmali všetko o Java Collection Framework a jeho rôznych podporných rozhraniach a triedach.
Keď máte zbierku, chcete získať prístup k jej prvkom, pridať alebo odstrániť alebo spracovať tieto prvky. Ak chcete toto všetko spracovať prostredníctvom programu Java, mali by ste byť schopní prechádzať kolekciou, ktorú používate. Tu prichádza na scénu iterátor.
Čo sa dozviete:
- Čo je Java Iterator?
- Záver
Čo je Java Iterator?
V Jave je Iterátor konštrukt, ktorý sa používa na prechádzanie alebo prechádzanie zbierkou.
Aby ste mohli používať iterátor, musíte získať iteračný objekt pomocou „ iterátor () “ metóda zberného rozhrania. Java Iterator je rozhranie rámca kolekcie a je súčasťou balíka „java.util“. Pomocou Java Iterator môžete prechádzať zbierkou objektov.
Rozhranie Java Iterator nahradzuje enumerátor, ktorý bol použitý skôr na prechádzanie niektorými jednoduchými zbierkami, ako sú vektory.
Hlavné rozdiely medzi Java Iterator a Enumerator sú:
- Výrazné zlepšenie v názvoch metód.
- Elementy metód môžete odstrániť z kolekcie, ktorá sa prechádza, pomocou iterátora.
V tomto výučbe sa budeme venovať podrobnostiam rozhrania Iterator a rozhrania ListIterator, ktoré je obojsmerným rozhraním.
Typy iterátorov
- Enumerátor
- Iterátor
- ListIterator
Enumerátor sa teraz zriedka používa. Preto sa v našej sérii tutoriálov zameriame na rozhrania Iterator a ListIterator.
Iterátorové rozhranie v Jave
Rozhranie Iterator v Jave je súčasťou rámca Collections v balíku „java.util“ a je kurzorom, ktorým je možné prechádzať zbierkou objektov.
Rozhranie Iterator má nasledujúce hlavné vlastnosti:
- Rozhranie Iterator je k dispozícii od kolekčného rámca Java 1.2.
- Jeden po druhom prechádza zbierkou predmetov.
- Populárne známy ako „Universal Java Cursor“, pretože pracuje so všetkými zbierkami.
- Toto rozhranie podporuje operácie „čítanie“ a „odstránenie“, t. J. Prvok môžete počas iterácie odstrániť pomocou iterátora.
Všeobecné zastúpenie rozhrania iterátora je uvedené nižšie:
Ďalej sa pozrime na vyššie uvedené metódy Iterátora.
Iterátorové metódy
Rozhranie Iterator podporuje nasledujúce metódy:
# 1) Ďalej ()
Prototyp: E ďalej ()
Parametre: bez parametrov
Typ vrátenia: E -> prvok
Popis: Vráti nasledujúci prvok v kolekcii.
Ak iterácia (kolekcia) nemá viac prvkov, hodí sa NoSuchElementException .
# 2) hasNext ()
Prototyp: boolean hasNext ()
Parametre: NIL
Typ vrátenia: true => v kolekcii sú prvky.
False => už žiadne prvky
Popis: Funkcia hasNext () kontroluje, či je v kolekcii, ku ktorej sa pristupuje pomocou iterátora, viac prvkov. Ak už neexistujú žiadne ďalšie prvky, ďalšiu metódu () nevoláte. Inými slovami, táto funkcia sa dá použiť na rozhodnutie, či sa má volať metóda next ().
# 3) odstrániť ()
Prototyp: void remove ()
Parametre: NIL
Typ vrátenia: NIL
Popis: Odstráni posledný prvok vrátený iterátorom iterujúcim cez podkladovú kolekciu. Metódu remove () je možné volať iba raz za ďalšie volanie ().
Ak iterátor nepodporuje operáciu odstránenia, hodí sa UnSupportedOperationException . Vrhá to IllegalStateException ak ďalšia metóda ešte nie je volaná.
# 4) forEachRemaining ()
Prototyp: void forEachRemaining (spotrebiteľ super JE > akcia)
Parametre: action => akcia, ktorá sa má vykonať
Typ vrátenia: neplatný
Popis: Vykoná zadanú akciu s každým zo zvyšných prvkov kolekcie, kým sa nevyčerpajú všetky prvky alebo ak akcia nevyvolá výnimku. Výnimky vyvolané akciou sa prenášajú na volajúceho.
Ak je akcia nulová, potom sa zvyšuje nullPointerException . Táto funkcia je novým prírastkom do rozhrania Iterator v jazyku Java 8.
Príklad Java Iterator
Implementujme program Java na demonštráciu použitia rozhrania Iterator. Nasledujúci program vytvorí zoznam kvetov ArrayList. Potom získa iterátor pomocou metódy iterator () v ArrayList. Potom sa prejde zoznam, aby sa zobrazil každý prvok.
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() + ' '); } } }
Výkon:
Obmedzenia Iterátorového rozhrania
- Operáciu na nahradenie prvku alebo pridanie nového prvku nie je možné vykonať pomocou tohto iterátora.
- Iterácia prebieha iba v jednom smere, t. J. Vpred.
- Podporuje iba postupnú iteráciu.
- Ak majú byť iterované veľké objemy dát, je ovplyvnená výkonnosť Iterátora.
Iterátor vs.Iterable
Aj keď rozhrania Iterable a Iterator znejú podobne, sú úplne odlišné. Trieda, ktorá implementuje Iterovateľné rozhranie, získava schopnosť iterovať nad objektmi triedy, ktoré používajú rozhranie iterátora.
Ďalej uvádzame niektoré z hlavných rozdielov medzi týmito dvoma rozhraniami, ktoré by ste si mali uvedomiť:
Iterovateľné rozhranie | Iterátorové rozhranie |
---|---|
Predstavuje kolekciu, ktorú je možné prechádzať pomocou slučky foreach. | Umožňuje opakovať niektoré ďalšie kolekcie. |
Trieda, ktorá implementuje iterovateľné rozhranie, musí prepísať metódu iterator (). | Metódy hasNext () a next () rozhrania Iterator majú byť prepísané triedou, ktorá ich implementuje. |
Neukladá aktuálny stav. | Ukladá aktuálny stav iterácie. |
Inštancia rozhrania iterátora by sa mala vytvoriť pri každom vyvolaní metódy iterator (). | Žiadna takáto zmluva o rozhraní iterátora. |
Pohybuje sa iba v smere dopredu. | Pohybuje sa vpred a pod rozhrania, ako je listIterator, podporujú obojsmerné prechádzanie. |
Neposkytuje žiadnu metódu na úpravu prvkov počas iterácie. | Poskytuje metódu remove, ktorá dokáže odstrániť prvok, keď prebieha iterácia. |
Rozhranie ListIterator v Jave
Rozhranie ListIterator je podradením rozhrania iterátora. Funguje na kolekciách typov zoznamov, ako sú zoznamy prepojených liniek, zoznamy polí atď. Toto rozhranie teda prekonáva nedostatky rozhrania Iterator.
Medzi hlavné vlastnosti rozhrania ListIterator patria:
- Rozhranie ListIterator rozširuje rozhranie Iterator.
- Rozhranie ListIterator podporuje operácie CRUD, tj. Vytváranie, čítanie, aktualizácia a mazanie.
- Podporuje iteráciu v smere dopredu aj dozadu.
- Pretože je toto rozhranie obojsmerné, je kurzor vždy umiestnený medzi predchádzajúcim a nasledujúcim prvkom.
- Toto rozhranie funguje hlavne na implementácie zoznamov ako ArrayList, LinkedList atď.
- K dispozícii od verzie Java 1.2
Rozhranie ListIterator je znázornené takto:
Ako už bolo spomenuté, rozhranie ListIterator rozširuje rozhranie Iterator. Okrem podpory všetkých metód rozhrania iterátora, ako je znázornené vyššie, má rozhranie ListIterator aj vlastné metódy, ktoré mu pomáhajú vykonávať operácie CRUD a obojsmernú iteráciu.
Poďme podrobne diskutovať o metódach ListIterator.
Metódy ListIterator
Upozorňujeme, že metódy rozhrania Iterator, next (), hasNext () a remove () fungujú presne rovnakým spôsobom ako rozhranie ListIterator. Preto tieto metódy v tejto časti preskočíme. Okrem vyššie uvedených metód má ListIterator nasledujúce metódy -
Predchádzajúci ()
Prototyp: E predchádzajúci ()
Parametre: NIL
Typ vrátenia:
E- predchádzajúci prvok v zozname.
- 1 - ak je iterátor na začiatku zoznamu.
Popis: Táto funkcia vráti predchádzajúci prvok v zozname. Po vrátení predchádzajúceho prvku sa kurzor presunie dozadu na nasledujúci prvok.
hasPrevious ()
Prototyp: boolean hasPrevious ()
Parametre: NIL
Typ vrátenia: true => iterátor má viac prvkov, keď sa zoznam posúva dozadu.
Popis: Táto funkcia kontroluje, či má ListIterator viac prvkov smerom dozadu.
previousIndex
Prototyp: int previousIndex ()
Parametre: NIL
Typ vrátenia:
int - index predchádzajúceho prvku
- 1 - ak je ukazovateľ na začiatku zoznamu.
Popis: Vráti index predchádzajúceho prvku, ktorý je vrátený predchádzajúcim () volaním.
nextIndex
Prototyp: int nextIndex ()
Parametre: NIL
Typ vrátenia:
int - ďalší index
- 1 - ak je iterátor na konci zoznamu.
Popis: Vráti nasledujúci index prvku v zozname. Tento prvok je vrátený volaním metódy next ().
sada ()
Prototyp: neplatná množina (E a)
Parametre: e - prvok, ktorý sa má nahradiť
Typ vrátenia: NIL
Popis: Používa sa na nahradenie posledného prvku daným prvkom e.
pridať ()
Prototyp: void add (E e)
Parametre: e - prvok, ktorý sa má pridať
Typ vrátenia: NIL
Popis: Pridá nové prvky do zoznamu na pozíciu pred nasledujúcou () prvkom.
Uveďte príklad iterátora
Teraz vieme, čo je ListIterator a aké sú rôzne metódy, ktoré podporuje. Poďme do toho a implementujeme program Java, ktorý demonštruje ListIterator.
V tomto programe sme použili ArrayList. Potom pomocou metód ListIterator prechádzame zoznamom v smere dopredu aj dozadu a zobrazujeme výstup.
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()+' '); } }
Výkon:
Doteraz sme diskutovali o rozhraniach, iterátoroch a Listiterátore, ďalej uvidíme rôzne príklady použitia týchto rozhraní na prechádzanie rôznymi zbierkami. Najskôr sa však pozrime na prechádzanie jednoduchými poľami a potom prejdime k ďalším zbierkam.
Pole Iterator
V Jave existujú dva spôsoby iterácie nad prvkami poľa. Popíšme spôsoby pomocou príkladov kódu.
# 1) pre slučku
Toto je najjednoduchší spôsob iterácie po poli. Používame jednoduchú slučku for, ktorá zvýši index pri každej iterácii a zobrazí jeho obsah.
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 Výkon:
Vyššie uvedený program zobrazuje obsah poľa pomocou cyklu for.
# 2) forEach loop
Toto je druhý spôsob iterácie nad poľami. Tu používame špecializované cykly for alebo forEach. Tu prechádzame po poli pre každý prvok a potom zobrazujeme obsah.
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 + ' '); } } }
Výkon:
ForEach je v porovnaní s cyklom for optimalizovaný. Je kratší na písanie a je tiež rýchlejší.
Iterátor ArrayList
Ak chcete prechádzať zbierkou ArrayList, môžete to urobiť pomocou rozhrania Iterator. Pretože iterátor je rozhranie, nemôžete ho vytvoriť okamžite. Namiesto toho môžete použiť metódu iterátora () kolekcie ArrayList na získanie iterátora a potom prechádzať zoznamom.
Iterátor iterátor ();
Príklad na demonštráciu iterátora ArrayList.
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() + ' '); } }
Výkon:
LinkedList Iterator
Teraz sa pozrime na funkčnosť iterátora v prípade zbierky LinkedList.
Kolekcia LinkedList podporuje metódu listIterator (), ktorá vracia listIterator na prechádzanie prepojeným zoznamom.
Všeobecný formát tejto funkcie je
ListIterator list_iter = LinkedList.listIterator (int index);
Tu je index celočíselná hodnota, ktorá určuje pozíciu v zbierke prepojených zoznamov, odkiaľ by sa malo začať prechádzať.
Poďme pochopiť iterátor zoznamu v prepojenom zozname so vzorovým programom. Rovnaký iteračný program poľa sme upravili a zmenili tak, aby obsahoval listiterátor s 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() + ' '); } }
Výkon:
java programy rozhovorov a odpovede pre skúsených
Iterátor Java Map / Hashmap
Mapa alebo jej variácie ako hashmap, treemap atď. Nie sú zbierkami. Preto na ňom nemôžete priamo použiť metódu iterátora. Namiesto toho by ste mali iterovať nad hodnotami vstupu kľúča, aby ste prečítali páry kľúč / hodnota.
Aj keď na iteráciu hodnôt mapy môžete použiť rôzne metódy, napríklad forEach, for loop atď., Najlepšou a najefektívnejšou metódou je použitie iterátora na iteráciu kľúčových hodnôt. Počas iterácie môžete tiež odstrániť položky z mapy pomocou metódy odstránenia.
Príklad použitia Iterátora s 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()); } } }
Výkon:
Vo vyššie uvedenom programe sme definovali mapu s celočíselnými kľúčmi a hodnotami typu reťazca. Potom definujeme iterátor nad mapou. Zadajte a zobrazte páry kľúč / hodnota.
Iterátor Java Set
Metóda iterator () súboru Java.util.set sa používa na získanie iterátora, ktorý vracia prvky v množine v náhodnom poradí.
Iterator set_iterator = Set.iterator();
“Set_iterator” iteruje cez rôzne prvky množiny a vracia ich hodnoty.
Podobným spôsobom hash sada obsahuje aj funkciu iterátora, ktorá vracia iterátor ako množina iterátorov.
Iterator hashset_iterator = Hash_Set.iterator();
Ďalej je uvedený príklad programovania na demonštráciu nastaveného iterátora.
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()); } } }
Výkon:
Táto implementácia používa Iterátor HashSet a zobrazuje jednotlivé hodnoty iteráciou cez prvky HashSet.
Iterator vs ListIterator
Uveďme tabuľku hlavných rozdielov medzi rozhraniami Iterator a ListIterator.
Iterátor ListIterator Môže prechádzať všetky zbierky vrátane sady, mapy atď. Môže byť použitý na prechádzanie iba kolekcie typov zoznamov ako ArrayList, LinkedList. Iteruje kolekciu iba smerom dopredu. Môže iterovať po kolekcii vpred aj vzad. Nie je možné získať indexy. Dokáže získať indexy. V žiadnom prípade nemôžete do zbierky pridať nové prvky. Do zbierky môžete pridať nové prvky. Iterátor nemôže upravovať prvky počas iterácie. ListIterator môže upravovať prvky v kolekcii pomocou metódy set ().
často kladené otázky
Otázka č. 1) Čo je iterácia v prostredí Java?
Odpoveď: Iterácia je proces, pri ktorom sa blok kódu opakovane spúšťa, kým daná podmienka nebude alebo nebude existovať. Pomocou iterácie môžete prechádzať postupnosťou prvkov alebo spracovávať údaje.
Otázka 2) Koľko typov iterátorov je v Jave?
Odpoveď: Iterátory sa používajú na prechádzanie zbierkami v Jave.
V Jave existujú tri typy iterátorov:
- Sčítači
- Iterátory
- ListIterátory
Otázka 3) Ako môžem použiť Iterátor v Jave?
Odpoveď: Ak chcete pomocou iterátora prechádzať kolekciou, musíte ju najskôr získať pomocou metódy iterator () určenej kolekcie.
Potom môžete na získanie prvku použiť metódy hasNext () a next () iterátora.
Otázka č. 4) Prečo sa namiesto cyklu for používa Iterator?
Odpoveď: Iterátor aj slučka for sa používajú na opakované vykonávanie konkrétneho bloku kódu. Ale hlavný rozdiel je v tom, že v cykle for nemôžete meniť ani upravovať obsah kolekcie. Aj keď sa ho pokúsite upraviť, vyvolá to concurrentModificationException. Pomocou iterátora môžete odstrániť prvok z kolekcie.
Otázka č. 5) Prečo potrebujeme Iterator v Jave?
Odpoveď: Iterátor vám pomôže načítať prvky v kolekcii alebo kontajneri bez toho, aby programátor musel poznať vnútornú štruktúru alebo fungovanie kolekcie. Sú elegantnejšie, spotrebúvajú menej pamäte a taktiež sú programátorom ušetrení pri písaní zdĺhavého kódu.
Po druhé, prvky môžu byť uložené v kolekcii akýmkoľvek spôsobom, ale pomocou iterátora ich môže programátor načítať rovnako ako zoznam alebo akúkoľvek inú postupnosť.
Záver
V tomto tutoriáli sme diskutovali o iterátoroch v Jave, ktoré sa používajú so zbierkami. Táto znalosť iterátorov pomôže čitateľom pochopiť zbierky, ktoré sa naučíme v nasledujúcich lekciách.
Odporúčané čítanie
- Výukový program pre rozhranie Java a abstraktnú triedu s príkladmi
- Výukový program JAVA pre začiatočníkov: viac ako 100 praktických výučbových programov Java Video
- Nasadenie Java: Vytvorenie a vykonanie súboru Java JAR
- Java „toto“ kľúčové slovo: Výukový program s príkladmi kódu
- Virtuálny stroj Java: Ako JVM pomáha pri spúšťaní aplikácií Java
- Modifikátory prístupu v prostredí Java - návod s príkladmi
- Výukový program Java Reflection s príkladmi
- C ++ Vs Java: tridsať najdôležitejších rozdielov medzi C ++ a Java s príkladmi