Uzskaitījums pret iteratoru
Ir daudzas datu struktūras, kas Java darbojas kā kolekcijas, piemēram, vektori, hash tabulas un klases, kas ievieš Java kolekciju ietvaru (t.i., HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap un LinkedHashSet). Ir daudz veidu, kā atkārtot Java objektu atsevišķus elementus. Java nodrošina divas saskarnes, lai atvieglotu šo uzdevumu. Uzskaitīšana un Iterators ir divas no java.util pakotnē atrodamajām saskarnēm, kas nodrošina funkcionalitāti uzskaitīt, izmantojot secības vai objektus ar vienumu kopu. Enumerator tika ieviests JDK 1.0 un Iterator, kas tika ieviests JDK 1.2 versijā, praktiski dublē Enumerator funkcionalitāti (kolekciju ietvara ietvaros).
Kas ir uzskaitīšana?
Uzskaitīšana ir publiska Java saskarne, kas ieviesta JDK 1.0, kas nodrošina iespēju uzskaitīt, izmantojot elementu secības. Tas ir atrodams java.util pakotnē. Ja uzskaitīšanas saskarni īsteno objekts, šis objekts var ģenerēt elementu secību. Uzskaitīšanas saskarnei ir divas metodes. Metode hasMoreElements() pārbaudīs, vai šajā uzskaitē ir vairāk elementu, un nextElement() atgriež nākamo elementu secībā (ja ir vēl vismaz viens). Citiem vārdiem sakot, secīgi izsaucot nextElement(), programmētājs var piekļūt atsevišķiem sērijas elementiem. Piemēram, lai drukātu visus Vector v1 elementus, izmantojot Enumerator, var izmantot šādu koda fragmentu.
Uzskaitījums e=v1.elements();
Kamēr(e.hasMoreLements()){
System.out.println(e.nextElement());
}
Enumerator var izmantot arī, lai definētu SequenceInputStream objektu ievades straumi.
Kas ir Iterators?
Iterator ir publiska saskarne Java.util pakotnē, kas ļauj atkārtot kolekciju objektu elementus, kas ievieš kolekciju ietvaru (piemēram, ArrayList, LinkedList utt.). Tas tika ieviests JDK 1.2 versijā un aizstāja Enumerator Java kolekciju sistēmā. Iteratoram ir trīs metodes. Metode hasNext() pārbauda, vai kolekcijā ir atlikuši elementi, un metode next() atgriež nākamo sērijas elementu. Metodi Remove() var izmantot, lai noņemtu pašreizējo elementu no pamatā esošās kolekcijas. Piemēram, lai drukātu visus Vector v1 elementus, izmantojot Iteratoru, var izmantot šādu koda fragmentu.
Iterator i=v1.elements();
Kamēr(i.hasNext()){
System.out.println(e.next());
}
Kāda ir atšķirība starp Enumeration un Iterator?
Lai gan Enumeration un Iterator ir divas no java.util pakotnē atrodamajām saskarnēm, kas ļauj iterēt/uzskaitīt, izmantojot sērijas elementus, tām ir savas atšķirības. Faktiski Iterator, kas tika ieviests pēc uzskaitīšanas, Java kolekcijas ietvaros aizstāj uzskaitījumu. Atšķirībā no Enumeration, Iterator ir drošs pret kļūmēm. Tas nozīmē, ka vienlaicīgas modifikācijas (pamatkolekcijā) nav atļautas, kad tiek izmantots Iterator. Tas ir ļoti noderīgi daudzpavedienu vidēs, kur vienmēr pastāv vienlaicīgu modifikāciju risks. Vienlaicīgas modifikācijas gadījumā Iterator objekts izliks ConcurrentModificationException. Iteratoram ir īsāki metožu nosaukumi, salīdzinot ar Enumerator. Turklāt iteratoram ir papildu funkcionalitāte iterācijas laikā dzēst elementus (kas nav iespējams, izmantojot Enumerator). Tātad, ja ir nepieciešams noņemt elementus no kolekcijas, Iterator ir vienīgā iespēja, ko var apsvērt.