Enumerazione vs Iteratore
Ci sono molte strutture di dati che agiscono come raccolte in Java come vettori, tabelle hash e classi che implementano Java Collections Framework (cioè HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap e LinkedHashSet). Esistono numerosi modi per scorrere i singoli elementi degli oggetti in Java. Java fornisce due interfacce per semplificare questa operazione. Enumeration e Iterator sono due delle interfacce trovate nel pacchetto java.util che forniscono funzionalità per enumerare sequenze o oggetti con un insieme di elementi. Enumerator è stato introdotto in JDK 1.0 e Iterator, introdotto in JDK 1.2, duplica virtualmente la funzionalità dell'Enumerator (all'interno di Collections Framework).
Cos'è l'enumerazione?
L'enumerazione è un'interfaccia pubblica in Java, introdotta in JDK 1.0, che fornisce la capacità di enumerare sequenze di elementi. Si trova nel pacchetto java.util. Quando l'interfaccia Enumeration è implementata da un oggetto, quell'oggetto può generare una sequenza di elementi. L'interfaccia di enumerazione ha due metodi. Il metodo hasMoreElements () verificherà se questa enumerazione contiene più elementi e nextElement () restituisce l'elemento successivo nella sequenza (se ce n'è almeno un altro da completare). In altre parole, chiamando in successione nextElement (), il programmatore può accedere ai singoli elementi della serie. Ad esempio, per stampare tutti gli elementi in Vector v1 utilizzando Enumerator, è possibile utilizzare il seguente frammento di codice.
Enumerazione e = v1.elements ();
While (e.hasMoreLements ()) {
System.out.println (e.nextElement ());
}
Enumerator può essere utilizzato anche per definire il flusso di input per gli oggetti SequenceInputStream.
Cos'è Iterator?
Iterator è un'interfaccia pubblica nel pacchetto Java.util, che consente l'iterazione attraverso gli elementi degli oggetti collections che implementano il framework Collections (come ArrayList, LinkedList, ecc.). Questo è stato introdotto in JDK 1.2 e ha sostituito l'Enumerator all'interno di Java Collections Framework. Iterator ha tre metodi. Il metodo hasNext () verifica se sono presenti elementi rimanenti nella raccolta e il metodo next () restituisce l'elemento successivo nella serie. Il metodo remove () può essere utilizzato per rimuovere l'elemento corrente dalla raccolta sottostante. Ad esempio, per stampare tutti gli elementi in Vector v1 utilizzando Iterator, è possibile utilizzare il seguente frammento di codice.
Iteratore i = v1.elements ();
While (i.hasNext ()) {
System.out.println (e.next ());
}
Qual è la differenza tra Enumeration e Iterator?
Sebbene Enumeration e Iterator siano due delle interfacce trovate nel pacchetto java.util, che consentono di iterare / enumerare gli elementi di una serie, hanno le loro differenze. In realtà, Iterator, che è stato introdotto dopo l'enumerazione, sostituisce l'enumerazione all'interno del framework delle collezioni Java. A differenza dell'enumerazione, Iterator è a prova di errore. Ciò significa che le modifiche simultanee (alla raccolta sottostante) non sono consentite quando viene utilizzato Iterator. Ciò è molto utile in ambienti multi-thread in cui c'è sempre il rischio di modifiche simultanee. In caso di modifica simultanea, l'oggetto Iterator genererà un'eccezione ConcurrentModificationException. Iterator ha nomi di metodo più brevi rispetto a Enumerator. Inoltre,iterator ha la funzionalità aggiuntiva di eliminare elementi durante l'iterazione (cosa non possibile utilizzando Enumerator). Quindi, se è necessario rimuovere elementi dalla raccolta, Iterator è l'unica opzione che può essere considerata.