Le modèle d'itérateur d'analyse du code source JDK est largement utilisé dans de nombreuses collections de JAVA. Voyons ensuite comment le modèle d'itérateur est utilisé dans le code source JAVA.

Analyse du code source JDK

Le modèle d'itérateur est largement utilisé dans de nombreuses collections de JAVA, voyons comment utiliser le modèle d'itérateur dans le code source JAVA.

Après avoir lu ce code, est-il très familier? Il est fondamentalement similaire au code ci-dessus. Les collections à une seule colonne utilisent des itérateurs, nous prenons ArrayList comme exemple pour illustrer

  • List: Classe d'agrégation abstraite
  • ArrayList: classe d'agrégation concrète
  • Itérateur: itérateur abstrait
  • list.iterator (): Ce qui est retourné est Iterator un objet itérateur concret qui implémente l'  interface

Jetons un coup d'œil à l'implémentation du code de ArrayList en particulier


public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
    
    public Iterator<E> iterator() {
        return new Itr();
    }
    
    private class Itr implements Iterator<E> {
        int cursor;       // 下一个要返回元素的索引
        int lastRet = -1; // 上一个返回元素的索引
        int expectedModCount = modCount;
​
        Itr() {}
        
        //判断是否还有元素
        public boolean hasNext() {
            return cursor != size;
        }
​
        //获取下一个元素
        public E next() {
            checkForComodification();
            int i = cursor;
            if (i >= size)
                throw new NoSuchElementException();
            Object[] elementData = ArrayList.this.elementData;
            if (i >= elementData.length)
                throw new ConcurrentModificationException();
            cursor = i + 1;
            return (E) elementData[lastRet = i];
        }
        ...
}

Cette partie du code est relativement simple, iterator renvoyant approximativement un Iterator objet instancié dans la  méthode  . Itr est une classe interne qui implémente l'  Iterator interface et réécrit les méthodes abstraites qu'elle contient.

Remarque:

Lorsque nous développons avec JAVA, si nous voulons utiliser le mode itérateur,

Laissez simplement notre propre classe de conteneur définie implémenter java.util.Iterableet implémenter sa méthode iterator ()

Faites-le java.util.Iterator simplement renvoyer une  classe d'implémentation.

Je suppose que tu aimes

Origine blog.csdn.net/qq_39368007/article/details/114236049
conseillé
Classement