Enumeration vs Iterator
Maraming istruktura ng data na gumaganap bilang mga koleksyon sa Java gaya ng Vectors, Hash table at mga klase na nagpapatupad ng Java Collections Framework (i.e. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap at LinkedHashSet). Mayroong maraming mga paraan upang umulit sa pamamagitan ng mga indibidwal na elemento ng mga bagay sa Java. Nagbibigay ang Java ng dalawang interface upang gawing mas madali ang gawaing ito. Ang Enumeration at Iterator ay dalawa sa mga interface na makikita sa java.util package na nagbibigay ng functionality upang magbilang sa pamamagitan ng mga sequence o mga bagay na may isang set ng mga item. Ang Enumerator ay ipinakilala sa JDK 1.0 at Iterator na ipinakilala sa JDK 1.2 ay halos duplicate ang functionality ng Enumerator (sa loob ng Collections Framework).
Ano ang Enumeration?
Ang Enumeration ay isang pampublikong interface sa Java, na ipinakilala sa JDK 1.0, na nagbibigay ng kakayahang magbilang sa pamamagitan ng mga pagkakasunud-sunod ng mga elemento. Ito ay matatagpuan sa ilalim ng java.util package. Kapag ang Enumeration interface ay ipinatupad ng isang object, ang object na iyon ay maaaring makabuo ng isang sequence ng mga elemento. Ang interface ng enumerasyon ay may dalawang pamamaraan. Ang pamamaraan na hasMoreElements() ay susubok kung ang enumeration na ito ay naglalaman ng higit pang mga elemento at ang nextElement() ay nagbabalik ng susunod na elemento sa pagkakasunud-sunod (kung mayroon pang isa pa). Sa madaling salita, sa pamamagitan ng sunud-sunod na pagtawag sa nextElement(), maa-access ng programmer ang mga indibidwal na elemento sa serye. Halimbawa, para i-print ang lahat ng elemento sa Vector v1 gamit ang Enumerator, maaaring gamitin ang sumusunod na code snippet.
Enumeration e=v1.elements();
Habang(e.may Higit pangMga Lemento()){
System.out.println(e.nextElement());
}
Maaari ding gamitin ang Enumerator upang tukuyin ang stream ng input sa SequenceInputStream objects.
Ano ang Iterator?
Ang Iterator ay isang pampublikong interface sa Java.util package, na nagbibigay-daan sa pag-ulit sa pamamagitan ng mga elemento ng mga object ng collection na nagpapatupad ng Collections framework (gaya ng ArrayList, LinkedList, atbp.). Ito ay ipinakilala sa JDK 1.2 at pinalitan ang Enumerator sa loob ng Java Collections Framework. May tatlong pamamaraan ang Iterator. Ang pamamaraan hasNext() ay sumusubok kung may mga natitirang elemento sa koleksyon at ang susunod na() na pamamaraan ay nagbabalik ng susunod na elemento sa serye. Ang paraan ng remove() ay maaaring gamitin upang alisin ang kasalukuyang elemento mula sa pinagbabatayan na koleksyon. Halimbawa, para i-print ang lahat ng elemento sa Vector v1 gamit ang Iterator, maaaring gamitin ang sumusunod na snippet ng code.
Iterator i=v1.elements();
Habang(i.hasNext()){
System.out.println(e.next());
}
Ano ang pagkakaiba ng Enumeration at Iterator?
Bagaman, ang Enumeration at Iterator ay dalawa sa mga interface na makikita sa java.util package, na nagbibigay-daan sa pag-ulit/pag-enumerate sa pamamagitan ng mga elemento ng isang serye, mayroon silang mga pagkakaiba. Sa totoo lang, ang Iterator, na ipinakilala pagkatapos ng Enumeration, ay pinapalitan ang Enumeration sa loob ng Java Collections framework. Hindi tulad ng Enumeration, ang Iterator ay fail-safe. Nangangahulugan ito na ang mga kasabay na pagbabago (sa pinagbabatayan na koleksyon) ay hindi pinapayagan kapag ginamit ang Iterator. Ito ay lubhang kapaki-pakinabang sa mga multi-threaded na kapaligiran kung saan palaging may panganib ng kasabay na mga pagbabago. Sa kaganapan ng isang kasabay na pagbabago, ang bagay na Iterator ay magtapon ng isang ConcurrentModificationException. Ang Iterator ay may mas maiikling pangalan ng pamamaraan kumpara sa Enumerator. Higit pa rito, ang iterator ay may karagdagang pag-andar ng pagtanggal ng mga elemento sa panahon ng pag-ulit (na hindi posible gamit ang Enumerator). Kaya, kung may pangangailangang mag-alis ng mga elemento mula sa koleksyon, ang Iterator ang tanging opsyon na maaaring isaalang-alang.