Qu'est-ce qu'un itérateur externe et interne en Java?Iterator externe vs Iterator interne
Répondre
Il s'agit de qui controls the iteration.
D'autres détails sont dans cette question What are the benefits of the Iterator interface in Java?
J'ai trouvé ce description:
externes contre itérateurs internes.
Iterators externes - lorsque l'itération est contrôlée par l'objet de collection, nous disons que nous avons un Iterator externe.
Dans des langages comme .net ou java, il est très facile de créer des itérateurs externes. Dans notre implémentation classique, un itérateur externe est implémenté. Dans l'exemple suivant un itérateur externe est utilisé:
// using iterators for a clloection of String objects:
// using in a for loop
for (Iterator it = options.iterator(); it.hasNext();) {
String name = (String)it.next();
System.out.println(name);
}
// using in while loop
Iterator name = options.iterator();
while (name.hasNext()){
System.out.println(name.next());
}
// using in a for-each loop (syntax available from java 1.5 and above)
for (Object item : options)
System.out.println(((String)item));
itérateurs internes - Lorsque le contrôle iterator il nous avons un itérateur
De l'autre côté mise en œuvre et l'utilisation d'itérateurs internes est vraiment difficile. Lorsqu'un itérateur interne est utilisé, cela signifie que le code à exécuter est délégué à l'objet agrégé. Par exemple dans les langues qui offrent un soutien pour c'est facile d'appeler itérateurs internes:
collection do: [:each | each doSomething] (Smalltalk)
L'idée principale est de passer le code à exécuter à la collection. Ensuite, la collection appellera en interne la méthode doSomething sur chacun des composants. En C++, il est possible d'envoyer la méthode doMethod en tant que pointeur. En C#, .NET ou VB.NET, il est possible d'envoyer la méthode en tant que délégué. En Java le modèle de conception Functor
doit être utilisé. L'idée principale est de créer une interface de base avec une seule méthode (doSomething). Ensuite, la méthode sera implémentée dans une classe qui implémente l'interface et la classe sera passée à la collection pour itérer. Pour plus de détails, voir le motif de conception Functor
.
externe Iterator
Lorsque vous obtenez un itérateur et l'étape au-dessus, qui est un itérateur externe
for (Iterator iter = var.iterator(); iter.hasNext();) {
Object obj = iter.next();
// Operate on obj
}
itérateur
Lorsque vous passez un objet de fonction à une méthode pour exécuter plus une liste, c'est-à-dire un itérateur interne
var.each(new Functor() {
public void operate(Object arg) {
arg *= 2;
}
});
- 1. scala tourner un Iterator [Option [T]] dans un Iterator [T]
- 2. Conversion Enumeration à iterator
- 3. Iterator & Exceptions nommés
- 4. C++ problèmes iterator
- 5. Retour d'un Iterator
- 6. Liste Iterator Remove()
- 7. Problèmes conceptuels avec Iterator
- 8. Iterator personnalisé en C++
- 9. STL Iterator sans initialisant il
- 10. C++ Container/Iterator Dépendance Problème
- 11. STL iterator avec modèle personnalisé
- 12. comment déclarer iterator volatile en C++
- 13. jquery paramètres de la fonction iterator
- 14. Structure iterator Motif composite sans récursion
- 15. problème avec QVariant/QTreeWidgetItem/iterator sur qt4.4.3
- 16. résultats ORM Query: tableaux vs Résultat enveloppé poignée dans l'interface Iterator
- 17. Affectation de vector :: iterator à un tableau de tableau de caractères VS 2003
- 18. Convention d'attribution de noms de variables Iterator dans .NET
- 19. std :: map :: iterator plante le programme par incrément
- 20. Comment convertir C++ std :: élément de liste Multimap iterator
- 21. Création d'un Iterator sans fin avec une distribution donnée
- 22. std :: carte iterator pas itérer dans MFC app
- 23. « Impossible de convertir le paramètre » en utilisant boost :: variante iterator
- 24. comment incrémenter une insidet variable s: tag iterator
- 25. action et Jsp pour obtenir le iterator et l'afficher
- 26. Comment l'algorithme STL fonctionne-t-il indépendamment du type Iterator?
- 27. Comment transférer une classe interne?
- 28. erreur retournant std :: set <T> :: iterator dans le modèle
- 29. Iterator pour tous les éléments des mappages de hachage stockés dans un tableau
- 30. Est-il possible de mettre en œuvre un algorithme récursif avec un Iterator?
Puisque Java 5 est le mode d'utilisation préféré un itérateur externe, serait d'utiliser la boucle for-each: * pour (Object o: var) {// NOOP} * bien que ce soit simplement du sucre syntaxique pour l'itérateur explicite utilisant la version. – Alex
@JohannZacharee n'est pas foreach loop considéré comme un Iterator interne, puisque nous n'avons pas le contrôle sur l'itérateur? – denis631
@ denis631 Oui, je suis d'accord avec le fait que la boucle foreach fonctionne comme un itérateur interne. Je ne l'ai pas utilisé comme exemple car je crois comprendre que Java les convertit en un itérateur externe au moment de la compilation. J'ai choisi un exemple fonctionnel pour illustrer plus clairement les différences. –