La iteración de salida (Iterator, ListIterator, enumeración, foreach)

directorio


iterador

Los datos sólo una vez por ciclo positivo de la producción.
Aquí Insertar imagen Descripción

Los métodos más comunes:

método explicación
hasNext public boolean () Cuando se determina si los datos son un valor nulo
por defecto quitar vacío () Borrar datos (difícil de usar)
E pública siguiente () Obtener los datos actuales

Ejemplo:

List<String> list = new ArrayList<>();
        list.add("1");
        list.add("3");
        list.add("5");
        list.add("7");
        list.add("9");
        list.add("2");
        list.add("4");
        list.add("6");
        list.add("8");
        list.add("10");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {	//判断下一个数据是否为空
            String value = iterator.next();		//获取当前数据
            if ("3".equals(value)) {
                iterator.remove();	//删除数据,不会影响节点
            } else {
                System.out.println(value);
            }
        }

resultados:

1
5
7
9
2
4
6
8
10

Entre la lista, Conjunto, Colección, Lista tiene un método get (), puede obtener los datos de acuerdo con el índice.
Se requiere usar el método get () cada vez que el índice de búsqueda de los datos de salida, tiempo de complejidad de (n + 1) n, el rendimiento no es fuerte: Lista de método get salida iteradores () .

ListIterator (salida iterador bidireccional)

Los datos pueden ser secuencialmente de salida, los datos de salida pueden ser inversa.

ListIterator en presencia de un funcionamiento inverso del puntero interna deseada de salida, A alcanza puntero de datos deben entonces, en la salida puede ser invertida, de modo que desee para invertir la salida, la salida debe ser positivo.
Aquí Insertar imagen Descripción

Los métodos más comunes:

método explicación
hasPrevious public boolean () Una determinación de si los datos está vacía
E pública anterior (); Obtener datos

Ejemplo:

List<String> list = new ArrayList<>();
        list.add("a");
        list.add("c");
        list.add("b");
        list.add("m");
        list.add("a");
        list.add("d");
        list.add("g");
        list.add("j");
        list.add("l");
        list.add("q");
        ListIterator<String> listIterator = list.listIterator();
        System.out.print("正向输出:");
        while (listIterator.hasNext()) {
            System.out.print(listIterator.next() + "、");
        }
        System.out.print("\n反向输出:");
        while (listIterator.hasPrevious()) {
            System.out.print(listIterator.previous() + "、");
        }

resultados:

正向输出:a、c、b、m、a、d、g、j、l、q、
反向输出:q、l、j、g、d、a、m、b、c、a、

Enumeración

salida iteraciones temprana es ahora sólo Vector puede ser utilizado.
Aquí Insertar imagen Descripción
Los métodos más comunes:

método explicación
hasMoreElements booleanos públicos () Cuando se determina si los datos son un valor nulo
E pública nextElement () Obtener los datos actuales

Ejemplo:

 Vector<String> vector = new Vector<>();
        vector.add("a");
        vector.add("b");
        vector.add("c");
        vector.add("d");
        vector.add("e");
        vector.add("f");
        Enumeration<String> enumeration = vector.elements();
        while(enumeration.hasMoreElements()){
            System.out.println(enumeration.nextElement());
        }

resultados:

a
b
c
d
e
f

para cada

salida del bucle foreach, cuando el objeto de la clase a una salida personalizado, debe implementar la interfaz Iterable, devuelve una instancia de objeto iterador iterador del método reemplazado en la interfaz deben ser implementadas dentro de la clase interna Iterator definido.

Aquí Insertar imagen Descripción

Ejemplo: salida de clase personalizada

public class Demo01 {
    public static void main(String[] args) {
        Ball ball = new Ball();
        for (String b:ball) {
            System.out.print(b+"、");
        }
    }
}
class Ball implements Iterable<String>{
    private String[] brand = new String[]{"Hello","World"};
    private int footer;

    @Override
    public Iterator<String> iterator() {
        return new BallIter();
    }

    private class BallIter implements Iterator<String>{

        @Override
        public boolean hasNext() {
            //表示数组存在数据
            return Ball.this.footer < Ball.this.brand.length;
        }

        @Override
        public String next() {
            //返回数据
            return brand[Ball.this.footer++];
        }
    }
}

resultados:

Hello、World、

Ejemplo: lista de salida de encargo foreach

public class Demo02 {
    public static void main(String[] args) {
        ILink<String> link = new LinkImpl<>();
        link.add("1");
        link.add("2");
        for (String str:link) {
            System.out.println(str+"、");
        }
    }
}
interface ILink<T> extends Iterable<T>{
    /**
     *链表数据增加
     * @param data 数据
     */
    public void add(T data);
}
class LinkImpl<T> implements ILink<T>{
    private Node root;
    private Node<T> last;
    private Node currentNode;

    @Override
    public Iterator<T> iterator() {
        this.currentNode = this.root;
        return new LinkIter<>();
    }

    private static class Node<T>{
        private T data;
        private Node next;

        public Node() {

        }

        public Node(T data) {
            this.data = data;
        }
    }
    @Override
    public void add(T data) {
        Node<T> node = new Node<>(data);
        if(this.root == null){
            this.root = node;
        }else{
            this.last.next = node;
        }
        this.last = node;
    }

    private class LinkIter<T> implements Iterator<T>{

        @Override
        public boolean hasNext() {
            return LinkImpl.this.currentNode!=null;
        }

        @Override
        public T next() {
            T data = (T) LinkImpl.this.currentNode.data;
            LinkImpl.this.currentNode = LinkImpl.this.currentNode.next;
            return data;
        }
    }
}

resultados:

12
Publicado 61 artículos originales · ganado elogios 0 · Vistas 2181

Supongo que te gusta

Origin blog.csdn.net/sabstarb/article/details/104602390
Recomendado
Clasificación