Optælling vs Iterator
Der er mange datastrukturer, der fungerer som samlinger i Java, såsom vektorer, Hash-tabeller og klasser, der implementerer Java Collections Framework (dvs. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap og LinkedHashSet). Der er adskillige måder at gentage gennem de enkelte elementer i objekterne i Java. Java har to grænseflader for at gøre denne opgave lettere. Enumeration og Iterator er to af de grænseflader, der findes i java.util-pakken, der giver funktionalitet til at tælle gennem sekvenser eller objekter med et sæt elementer. Enumerator blev introduceret i JDK 1.0, og Iterator, der blev introduceret i JDK 1.2, duplikerede praktisk talt funktionaliteten af Enumerator (inden for Collections Framework).
Hvad er optælling?
Enumeration er en offentlig grænseflade i Java, introduceret i JDK 1.0, som giver mulighed for at tælle gennem sekvenser af elementer. Det findes under java.util-pakken. Når optællingsgrænsefladen implementeres af et objekt, kan objektet generere en sekvens af elementer. Optællingsgrænseflade har to metoder. Metoden hasMoreElements () vil teste, om denne optælling indeholder flere elementer, og nextElement () returnerer det næste element i sekvensen (hvis der er mindst én mere at gå). Med andre ord, ved at ringe til nextElement () successivt, kan programmøren få adgang til de enkelte elementer i serien. For eksempel for at udskrive alle elementer i Vector v1 ved hjælp af Enumerator, kan følgende kodestykke bruges.
Optælling e = v1.elements ();
Mens (e.hasMoreLements ()) {
System.out.println (e.nextElement ());
}
Enumerator kan også bruges til at definere strømmen af input til SequenceInputStream-objekterne.
Hvad er Iterator?
Iterator er en offentlig grænseflade i Java.util-pakken, som giver mulighed for iterering gennem elementer i samlingsobjekterne, der implementerer rammerne for samlinger (såsom ArrayList, LinkedList osv.). Dette blev introduceret i JDK 1.2 og erstattede Enumerator inden for Java Collections Framework. Iterator har tre metoder. Metoden hasNext () tester, om der er resterende elementer i samlingen, og den næste () -metode returnerer det næste element i serien. Metoden remove () kan bruges til at fjerne det aktuelle element fra den underliggende samling. For eksempel for at udskrive alle elementer i Vector v1 ved hjælp af Iterator, kan følgende kodestykke bruges.
Iterator i = v1.elements ();
Mens (i.hasNext ()) {
System.out.println (e.next ());
}
Hvad er forskellen mellem Enumeration og Iterator?
Selvom Enumeration og Iterator er to af de grænseflader, der findes i pakken java.util, som tillader iterering / optælling gennem elementer i en serie, har de deres forskelle. Faktisk erstatter Iterator, som blev introduceret efter Enumeration, Enumeration inden for rammerne af Java Collections. I modsætning til optælling er Iterator fejlsikker. Dette betyder, at samtidige ændringer (til den underliggende samling) ikke er tilladt, når Iterator bruges. Dette er meget nyttigt i miljøer med flere tråde, hvor der altid er risiko for samtidige ændringer. I tilfælde af en samtidig ændring kaster Iterator-objektet en ConcurrentModificationException. Iterator har kortere metodenavne sammenlignet med Enumerator. Desuden,iterator har den ekstra funktionalitet til at slette elementer under iterationen (hvilket ikke er muligt ved hjælp af Enumerator). Så hvis der er behov for at fjerne elementer fra samlingen, er Iterator den eneste mulighed, der kan overvejes.