Interview: Conception d'un itérateur sur une collection de collections
Conception d'un itérateur sur une collection de collections en java. L'itérateur doit masquer l'imbrication, vous permettant d'itérer l'ensemble des éléments appartenant à l'ensemble des collections, comme si vous travailliez avec une seule collection
Ce qu'il y a à ? Le prototype? La mise en œuvre?
à la fois, ce qui est de l'interface, et comment voulez-vous mettre en œuvre?
Si c'est votre entrevue d'emploi, pourquoi êtes-vous de les poster ici au lieu de simplement les faire?
Je ne voudrais pas concevoir quelque chose de moi-même -- je venais d'utiliser Google Collections: guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/... . Cela dit, la mise en œuvre est assez simple si vous avez vraiment envie de le faire vous-même.
est votre besoin est quelque chose de ce genre-de la Collection parent = new ArrayList(); Collection slave1 = new ArrayList(); slave1.ajouter(10); slave1.ajouter(20); slave2 = new HashSet(); slave2.ajouter(30); slave2.ajouter(40); parent.ajouter(slave1); parent.ajouter(slave2);
à la fois, ce qui est de l'interface, et comment voulez-vous mettre en œuvre?
Si c'est votre entrevue d'emploi, pourquoi êtes-vous de les poster ici au lieu de simplement les faire?
Je ne voudrais pas concevoir quelque chose de moi-même -- je venais d'utiliser Google Collections: guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/... . Cela dit, la mise en œuvre est assez simple si vous avez vraiment envie de le faire vous-même.
est votre besoin est quelque chose de ce genre-de la Collection parent = new ArrayList(); Collection slave1 = new ArrayList(); slave1.ajouter(10); slave1.ajouter(20); slave2 = new HashSet(); slave2.ajouter(30); slave2.ajouter(40); parent.ajouter(slave1); parent.ajouter(slave2);
OriginalL'auteur | 2010-07-24
Vous devez vous connecter pour publier un commentaire.
Voici une implémentation possible. Note que j'ai laissé remove() n'est pas implémentée:
OriginalL'auteur Eyal Schneider
C'est une vieille question, mais de nos jours (2019), nous avons JDK8+ goodies. En particulier, nous avons flux de, rendre cette tâche simple:
Je suis filtrage
null
intérieure collections, juste au cas où...EDIT: Si vous aussi vous souhaitez filtrer
null
éléments de l'intérieur de collections, il suffit d'ajouter un supplément non-null filtre aflterflatMap
:OriginalL'auteur Federico Peralta Schaffner
Dans ce post vous pouvez voir deux implémentations, la seule (petite) différence est qu'il prend un itérateur de itérateurs au lieu d'une collection de collections.
Cette différence combinée avec l'obligation de parcourir les éléments dans un round robin (une exigence qui n'a pas été demandé par les OP dans ce question) ajoute la surcharge de copie des itérateurs dans une liste.
La première approche est paresseux: il réitérera un élément uniquement lorsque cet élément est demandée, le "prix" nous avons à payer est que le code est plus complexe, car il doit gérer plus de bord de cas:
et la seconde ("avides" de la copie de tous les éléments de tous les itérateurs dans la demande d'ordre dans une liste et retourne un itérateur à cette liste ):
J'ai inclus un simple "test" code afin de montrer la façon d'utiliser le MultiIterator, ce n'est pas toujours trivial (en raison de l'utilisation de médicaments Génériques) comme vous pouvez le voir sur la ligne:
OriginalL'auteur alfasin
Voici une autre mise en œuvre:
OriginalL'auteur Geoffroy Warin
Tout d'abord, jetez un oeil à la mise en œuvre de l'itérateur en java.util.LinkedList
http://www.docjar.com/html/api/java/util/LinkedList.java.html
À partir de là, votre tâche est facile il suffit de mettre en œuvre une seule itérateur qui prend en compte le fait que c'est une itération sur les collections.
Ce qui concerne.
Il a valeur négative: Il prétend que l'analyse de LinkedList en quelque sorte vous donne une réponse, ce qui n'est pas (le vrai défi est de les deux niveaux de mise en œuvre, de ne pas obtenir un Itérateur à partir d'une Collection).
OriginalL'auteur Jose Diaz
si tout ce que vous avez à travailler avec des est java Itérateur: qui juste ont hasNext(), next() et remove(), j'ai pensé que vous devez aller autour d'elle.
La traiter comme vous pourrez le processus d'un tableau 2D, qui est, avec un extérieur et l'intérieur de la boucle, car ils ont le même "arrangement" mais le type de données différent. Comme vous le processus, de les transférer à une nouvelle collection.
alors peut-être une méthode privée:
fin
J'espère que cette aide. Il devrait y avoir d'autres façons de le résoudre, je suppose.
OriginalL'auteur Uche Dim