Számlálás vs Iterator
Számos adatstruktúra működik gyűjteményként a Java-ban, mint például a Vektorok, a Hash táblák és a Java Gyűjtemények keretrendszert megvalósító osztályok (pl. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap és LinkedHashSet). Számos módon lehet iterálni a Java objektumainak egyes elemein. A Java két interfészt biztosít a feladat megkönnyítésére. A felsorolás és az Iterator a java.util csomagban található két interfész, amelyek funkcionalitást kínálnak a sorozatok vagy objektumok sorozatokon keresztüli felsorolásához. Az Enumerator a JDK 1.0-ban, az Iterator pedig a JDK 1.2-ben került bevezetésre, amely gyakorlatilag megismétli a Enumerator funkcióit (a Gyűjtemények keretrendszerén belül).
Mi az a felsorolás?
Az Enumeration egy nyilvános felület a Java-ban, amelyet a JDK 1.0-ban vezettek be, és amely lehetővé teszi az elemek sorozatainak felsorolását. A java.util csomag alatt található. Amikor a felsorolási felületet egy objektum valósítja meg, ez az objektum az elemek sorozatát generálhatja. A felsorolási felületnek két módszere van. A hasMoreElements () metódus teszteli, hogy ez a felsorolás tartalmaz-e további elemeket, és a nextElement () visszaadja a sorozat következő elemét (ha még legalább egy van hátra). Más szavakkal, a nextElement () egymás utáni meghívásával 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ó.
E = v1.elemek felsorolása ();
Míg (e.hasMoreLements ()) {
System.out.println (e.nextElement ());
}
A számláló használható a SequenceInputStream objektumok bemeneti adatfolyamának meghatározására is.
Mi az Iterator?
Az Iterator egy nyilvános felület a Java.util csomagban, amely lehetővé teszi a gyűjtemény objektumok olyan elemei közötti iterációt, amelyek megvalósítják a Gyűjtemény keretrendszert (például ArrayList, LinkedList stb.). Ezt a JDK 1.2-ben vezették be, és a Java Gyűjtemények keretrendszerében felváltotta a számlálót. Az Iteratornak három módszere van. A hasNext () módszer teszteli, hogy vannak-e még elemek a gyűjteményben, és a következő () metódus a sorozat következő elemét adja vissza. Az remove () metódus használható az aktuális elem eltávolítására az alapul szolgáló gyűjteményből. Például a Vector v1 összes elemének az Iterator használatával történő kinyomtatásához 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 az Enumeráció és az Iterator között?
Noha az Enumeration és az Iterator a java.util csomagban található két interfész, amelyek lehetővé teszik az iterációt / felsorolást egy sorozat elemein keresztül, megvannak a maguk különbségei. Valójában az Enteration után bevezetett Iterator helyettesíti az Enumerációt a Java gyűjtemények keretein belül. A felsorolással ellentétben az Iterator hibamentes. Ez azt jelenti, hogy az Iterator használatakor (az alapul szolgáló gyűjtemény) egyidejű módosítások nem megengedettek. Ez nagyon hasznos többszálas környezetben, ahol mindig fennáll az egyidejű módosítások veszélye. Párhuzamos módosítás esetén az Iterator objektum dob egy ConcurrentModificationException-t. Az Iteratornak rövidebb metódusnevei vannak az Enumeratorhoz képest. Továbbá,Az iterator további funkcióval rendelkezik az elemek törlésével az iteráció során (ami nem lehetséges az Enumerator használatával). Tehát, ha el kell távolítani az elemeket a gyűjteményből, az Iterator az egyetlen megfontolható lehetőség.