Obtenga ListIterator en un minuto

Introducción

En la programación Java, ListIterator es una interfaz muy útil, que es una versión extendida del iterador de la interfaz List, que se puede utilizar para realizar el recorrido y la modificación de la estructura de datos de la lista enlazada.

fondo

ListIterator es una interfaz de clase interna proporcionada por Java, que encapsula el recorrido y la modificación de elementos en la Lista y proporciona una serie de métodos para respaldar estas operaciones. Proporciona más funciones que los iteradores ordinarios, como eliminar o reemplazar elementos durante la iteración e iterar hacia adelante. Debido a las características de ListIterator, esta interfaz es principalmente aplicable a la operación de la estructura de datos de la lista enlazada, como la clase LinkedList. Cuando necesitamos recorrer y modificar los elementos en la lista enlazada, necesitamos usar ListIterator.

uso

1. Travesía hacia adelante

  • El objeto ListIterator se obtiene a través del método listIterator() de la Lista, y su posición inicial se establece al principio de la lista. También puede usar el método listIterator(int index) para especificar la posición del ListIterator para comenzar a recorrer la Lista:
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
ListIterator<String> listIterator = list.listIterator();
while(listIterator.hasNext()){
    String element = listIterator.next();
    System.out.println(element);
}

2. Recorrido inverso

  • Además del recorrido hacia adelante, ListIterator también proporciona un método para recorrer la Lista en sentido inverso. Utilice los métodos hasPrevious() y previous() para recorrer la Lista de atrás hacia adelante. El código de ejemplo es el siguiente:
while(listIterator.hasPrevious()){
    String element = listIterator.previous();
    System.out.println(element);
}

3. establecer, agregar, eliminar operaciones

  • Además de recorrer la Lista, ListIterator también proporciona métodos para modificar los elementos de la Lista: remove(), set() y add()
while(listIterator.hasNext()){
    String element = listIterator.next();
    if("c".equals(element)){
        listIterator.set("d");
    }
    if("b".equals(element)){
        listIterator.add("e");
    }
    if("a".equals(element)){
        listIterator.remove();
    }
}

Práctica de desarrollo

  • Retire algunas llaves innecesarias
if (Objects.nonNull(publishObject)) {
    JSONObject pageJson = JSONObject.parseObject(publishObject);
    JSONObject pageRetJson = pageJson.getJSONObject(RECEIPT_PUBLISH_INFO_PAGE_JSON);
    List<TemplateFieldDTO> templateFieldDTOS = pageRetJson.getJSONArray("fields").toJavaList(TemplateFieldDTO.class);
    boolean flag = menuId.equals(MYRECEIPTMENU);
    ListIterator<TemplateFieldDTO> listIterator = templateFieldDTOS.listIterator();
    while (listIterator.hasNext()) {
        TemplateFieldDTO templateFieldDTO = listIterator.next();
        if (templateFieldDTO.getFieldName().equals("purchaser")) {
            listIterator.remove();
        }
        if (flag) {
            if (templateFieldDTO.getFieldName().equals("remarksDescribe")) {
                listIterator.remove();
            }
            if (templateFieldDTO.getFieldName().equals("remarksStatusName")) {
                listIterator.remove();
            }
        }
    }
    pageRetJson.put("fields", templateFieldDTOS);
    // 通过nacos获取配置的uri
    String listUriStr = menusListUriJson.getString(menuId);
    if (Func.isNotEmpty(listUriStr)) {
        pageRetJson.put("uri", listUriStr);
    }
    menuJson.put(COMMON_PAGE_MENU_ID, pageRetJson);
}

La diferencia entre Iterator y ListIterator:

  1. Iterator puede atravesar colecciones Set y List; ListIterator solo puede atravesar List.

  2. Iterator solo se puede recorrer en una dirección; ListIterator se puede recorrer en ambas direcciones (adelante/atrás).

  3. ListIterator hereda de la interfaz Iterator, agregando nuevas funciones, como agregar un elemento, reemplazar un elemento y obtener la posición de índice del elemento anterior o siguiente.

iterador

package java.util;
 
import java.util.function.Consumer;
 
public interface Iterator<E> {
   
    boolean hasNext();
   
    E next();
    
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
 
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

ListIterator

package java.util;
 
public interface ListIterator<E> extends Iterator<E> {
   
    boolean hasNext();
 
    E next();
 
    boolean hasPrevious();
 
    E previous();
  
    int nextIndex();
 
    int previousIndex();
 
    void remove();
 
    void set(E e);
 
    void add(E e);
}

Supongo que te gusta

Origin blog.csdn.net/u011277745/article/details/131073535
Recomendado
Clasificación