¿Podemos escribir una clase de contenedor nosotros mismos y usar un bucle for-each?

En Java, podemos escribir una clase de contenedor nosotros mismos y podemos usar el bucle for-each (también llamado bucle for mejorado o bucle foreach) para iterar sobre los elementos del contenedor. Para lograr esto, nuestra clase de contenedor debe cumplir las siguientes condiciones:

  1. Implementar la interfaz Iterable

  Nuestra clase contenedora debe implementar la interfaz java.lang.Iterable. La interfaz contiene un método llamado iterator(), que devuelve un objeto que implementa la interfaz java.util.Iterator para recorrer los elementos del contenedor.

  2. Implementar la interfaz Iterator

  Nuestra clase de contenedor también debe implementar la interfaz java.util.Iterator. La interfaz Iterator define varios métodos, como hasNext() (juzga si hay un siguiente elemento), next() (devuelve el siguiente elemento) y remove() (elimina el elemento actual del contenedor, operación opcional).

  A continuación, el autor usa un ejemplo de código específico para demostrar cómo crear una clase contenedora personalizada y usar el ciclo for-each para recorrerla:

import java.util.Iterator;

// 自定义容器类
class MyContainer<T> implements Iterable<T> {
    private T[] elements;
    private int size;
    
    @SuppressWarnings("unchecked")
    public MyContainer(int capacity) {
        elements = (T[]) new Object[capacity];
        size = 0;
    }
    
    public void add(T element) {
        elements[size++] = element;
    }

    @Override
    public Iterator<T> iterator() {
        return new MyIterator();
    }

    // 自定义迭代器类
    private class MyIterator implements Iterator<T> {
        private int currentIndex = 0;

        @Override
        public boolean hasNext() {
            return currentIndex < size;
        }

        @Override
        public T next() {
            return elements[currentIndex++];
        }
    }
}

public class Main {
    public static void main(String[] args) {
        MyContainer<String> container = new MyContainer<>(3);
        container.add("Apple");
        container.add("Banana");
        container.add("Orange");

        // 使用 for-each 循环遍历容器
        for (String fruit : container) {
            System.out.println(fruit);
        }
    }
}

  Resultado de salida:

Apple
Banana
Orange

  En el ejemplo anterior, creamos una clase de contenedor personalizada MyContainer que implementa la interfaz Iterable y proporciona una clase interna MyIterator que implementa la interfaz Iterator. De esta forma, podemos usar un bucle for-each para iterar sobre los elementos del contenedor.

Supongo que te gusta

Origin blog.csdn.net/Blue92120/article/details/132035460
Recomendado
Clasificación