Felsorolás vs Iterator
Számos olyan adatstruktúra létezik, amely gyűjteményekként működik a Java-ban, mint például a Vektorok, a Hash táblák és az osztályok, amelyek a Java Collection Framework-t valósítják meg (azaz HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap és LinkedHashSet). Számos módszer lehet a Java objektumok egyes elemein keresztüli iterációra. A Java két felületet biztosít a feladat megkönnyítéséhez. A felsorolás és az idézője a java.util csomagban található két olyan felület, amelyek olyan funkciókat biztosítanak, amelyek sorozat vagy objektum felsorolására szolgálnak egy elemkészlettel. Az Enumerator a JDK 1.0-ban került bevezetésre, az Iterator pedig az JDK 1.2-ben bevezetett gyakorlatilag megismétli az Enumerator funkcióit (a gyűjteménykeretben).
Mi az a felsorolás??
Az Enumeration a JDK 1.0-ban bevezetett nyilvános interfész Java-ban, amely lehetővé teszi az elemek sorozatain keresztüli felsorolást. A java.util csomag alatt található. Ha a felsorolási felületet egy objektum valósítja meg, akkor az objektum elemi sorozatot hozhat létre. A felsorolási felületnek két módja van. A hasMoreElements () módszer tesztelni fogja, ha ez a felsorolás tartalmaz több elemet, és a nextElement () visszaadja a sorozat következő elemét (ha van még legalább egy elem). Más szavakkal, ha a NextElement () -et egymás után meghívja, a programozó hozzáférhet a sorozat egyes elemeihez. Például a Vector v1 összes elemének az Enumerator használatával történő kinyomtatásához a következő kódrészlet használható.
Felirat e = v1.elemek ();
Míg (e.hasMoreLements ())
System.out.println (e.nextElement ());
Az Enumerator felhasználható a SequenceInputStream objektumok bemeneti adatfolyamának meghatározására.
Mi az Iterator??
Az Iterator egy nyilvános interfész a Java.util csomagban, amely lehetővé teszi a gyűjteménykeret-objektumokat (például ArrayList, LinkedList stb.) Történő iterálást. Ezt bevezették a JDK 1.2-be, és felváltotta az Enumerator-ot a Java Gyűjtemények keretén belül. Az Iterator három módszerrel rendelkezik. A hasNext () módszer megvizsgálja, hogy vannak-e fennmaradó elemek a gyűjteményben, és a következő () módszer visszaadja a sorozat következő elemét. Az remove () módszer használható az aktuális elem eltávolítására az alapul szolgáló gyűjteményből. Például, hogy a Vector v1 összes elemét Iterator segítségével nyomtassa ki, a következő kódrészlet használható.
Iterátor i = v1.elemek ();
Míg (i.hasNext ())
System.out.println (e.next ());
Mi a különbség a felsorolás és az idéző között??
Bár a felsorolás és az idézője a java.util csomagban található két olyan felület, amelyek lehetővé teszik egy sorozat elemeinek iterálását / felsorolását, vannak különbségeik. Valójában az Iterator, amelyet a felsorolás után vezettek be, helyettesíti a felsorolást a Java gyűjtemények keretén belül. A felsorolástól eltérően az Iterator hibabiztos. Ez azt jelenti, hogy az Iterator használatakor (az alapul szolgáló gyűjtemény) egyidejű módosítások nem engedélyezettek. Ez nagyon hasznos többszálú környezetben, ahol mindig fennáll az egyidejű módosítások kockázata. Egyidejű módosítás esetén az Iterator objektum eldobja a ConcurrentModificationException-t. Az Iterator rövidebb módszernevekkel rendelkezik, mint az Enumerator. Ezenkívül az iterator további funkcióval rendelkezik az elemek törlésével az iteráció során (ami az Enumerator használatával nem lehetséges). Tehát, ha szükség van elemek eltávolítására a gyűjteményből, az Iterator az egyetlen lehetőség, amelyet figyelembe lehet venni.