Resultado ListIterator anterior () y siguiente ()

el resultado es

A B C D

DC C2 B2 BA

¿Por qué no es resultado?

AB B2 CD

DC C2 B2 BA en primer tiempo?

Hice li.add ("B2") si word.equals "B". ¿Es solo la diferencia entre next () y previous ()? Quiero saber la respuesta por favor.

public static void main(String[] args) {

    List<String> list = Arrays.asList("A", "B", "C", "D");
    list = new ArrayList<>(list);
    ListIterator<String> li = list.listIterator();
    String word;

    while (li.hasNext()) {
        word = li.next();
        System.out.print(word + '\t');
        if (word.equals("B"))
           li.add("B2");
    }

    System.out.println();

    while (li.hasPrevious()) {
        word = li.previous();
        System.out.print(word + '\t');
        if (word.equals("C"))
            li.add("C2");
    }
}
Respuesta 1

Creo que la respuesta a su pregunta está aquí: https://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html#add(E) .

El elemento se inserta inmediatamente antes del elemento que sería devuelto por next (), si lo hubiera, y después del elemento que sería devuelto por previous (), si lo hubiera.

El nuevo elemento se inserta antes del cursor implícito: una llamada posterior a la siguiente no se vería afectada y una llamada posterior a la anterior devolvería el nuevo elemento.

En el primer bucle, cuando la palabra es igual a "B", el cursor implícito está entre "B" y "C", según la documentación, el nuevo elemento se agregará antes.

A    B       C     D
       ^   ^ 
      B2  cursor
Respuesta: 2

Ver ListIterator.add (E) :

... El elemento se inserta inmediatamente antes del elemento que sería devuelto por next () ...

Entonces, en su primera iteración, la adición de B2no se convertirá en la siguiente en la lista.

Respuesta: 3

https://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html

La razón es que cuando agrega un elemento al iterador, esto no cambia el next()elemento, sino el previous()único. Por lo tanto, cuando agregue "B2" y "C2", solo será recogido porprevious() llamadas solo lo recogerán. Y es por eso que la primera iteración no recoge B2 y C2 y la segunda iteración hacia atrás los selecciona a ambos.

Respuesta: 4

Estoy desarrollando una aplicación Java que necesita un componente especial para atributos dinámicos. Los argumentos se serializan (usando JSON) y se almacenan en una base de datos y luego se deserializan en tiempo de ejecución. Todos ...

Primer código: Bond [] bond = null; pruebe {JSONArray jsonArray = new JSONArray (resultado); bonos = nuevo enlace [jsonArray.length ()]; para (int i = 0; i <jsonArray.length (); ...

Quiero poder imprimir un número variable de elementos de mi matriz en cada línea. Cadena [] nombre = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi", "George", "Gregory", "Paul", ...

Tengo un programa Java con un Mapa de tipo <String, Project> que contiene todos los objetos del Proyecto y cada objeto del Proyecto contiene una Lista de objetos de Proceso relacionados, es decir, Lista <Proceso>. ...