La réponse courte est, dans le code source.
La réponse la plus longue est LinkedList
elle-même n'a pas besoin d'implémenter la méthode iterator()
si elle hérite d'une autre classe qui peut l'implémenter. Si vous regardez de plus près le javadoc for LinkedList, vous pouvez voir que LinkedList ne définit pas la méthode iterator()
, mais que vous implémentez Iterable
il devrait être là. En regardant la fin, vous pouvez également voir la section des méthodes héritées. Plus précisément, regardez "Méthodes héritées de la classe java.util.AbstractSequentialList", où iterator()
est répertorié. Nous avons maintenant déterminé que iterator
est en fait java.util.AbstractSequentialList
. Donc, pour trouver la mise en œuvre, vous pouvez consulter le source code de AbstractSequentialList
qui est:
public Iterator<E> iterator() {
return listIterator();
}
Maintenant que vous voyez la mise en œuvre dépend de la mise en œuvre de listIterator()
. LinkedList
n'implémente pas la méthode listIterator()
(il a un avec un argument mais cela attend la méthode sans argument). Donc, en regardant à nouveau le javadoc, nous pouvons trouver sous "Méthodes héritées de la classe java.util".. AbstractList » que la méthode listIterator()
est héritée de là à la recherche donc à la source code de AbstractList
:
public ListIterator<E> listIterator() {
return listIterator(0);
}
Maintenant, la méthode listIterator(int)
est mis en œuvre dans la classe LinkedList
De l'source code de LinkedList
.
public ListIterator<E> [More ...] listIterator(int index) {
checkPositionIndex(index);
return new ListItr(index);
}
Si vous avez besoin d'analyser plus avant ce qui est fait, vous pouvez continuer à partir de là
Je savais que vous pouviez implémenter votre propre itérateur (je l'ai fait pour un sujet à l'université, mais la classe n'était pas LinkedList), mais je n'étais pas du tout sûr d'une implémentation par défaut dans LinkedList, maintenant je suis – alberto