JavaにおけるIteratorとListIteratorの反復の違い


反復時にデータを変更できますか?
答えます。Iteratorが反復するとデータを除去できますが、追加はできません。ListIterator反復時にデータを追加して、データを削除して、順番に巡回します。

public class Bianli {
    public static void main(String[] args) {
        ArrayList<String> list= new ArrayList<>();
        list.add("aaa");
        list.add("sss");
        list.add("ddd");
        list.add("fff");
        list.add("ggg");
        Iterator<String> iterator = list.iterator();

        while(iterator.hasNext()){
            if(iterator.next().equals("ddd")){
                list.add("eee");//     ,
                iterator.remove();//      

            }

        }
        for (String s:list
             ) {
            System.out.println(s);
        }
        }
在这里插入图片描述
このディレクタはremove方法しかなく、add方法がないので、データを追加するにはlistオブジェクトに頼らなければなりませんが、この時にリストを通してデータを追加すると、二人が同時に一つのデータを操作するのと同じです。Exception in thread “main” java.util.ConcurrentModificationExceptionが発生します。
在这里插入图片描述
ListIteratorディケンサは、集合オブジェクトを介して追加することなく、データを追加するために、ディケンサを介して、add方法を提供している。
在这里插入图片描述

package today;

import java.util.*;

/**
 * @author : Gavin
 * @date: 2021/7/17 - 07 - 17 - 21:23
 * @Description: today
 * @version: 1.0
 */
public class Bianli {
    public static void main(String[] args) {
        ArrayList<String> list= new ArrayList<>();
        list.add("aaa");
        list.add("sss");
        list.add("ddd");
        list.add("fff");
        list.add("ggg");
        Iterator<String> iterator = list.iterator();

        while(iterator.hasNext()){
            if(iterator.next().equals("ddd")){
                //list.add("eee");//     ,
                iterator.remove();//      

            }

        }
        for (String s:list
             ) {
            System.out.println(s);
        }
        List <String>list1 = new ArrayList<>();
        list1.add("111");
        list1.add("222");
        list1.add("444");
        list1.add("666");
        list1.add("888");
        ListIterator<String> iterator1 = list1.listIterator();
        while(iterator1.hasNext()){
            if("444".equals(iterator1.next())){
                iterator1.remove();
                iterator1.add("333");

            }
        }
        for (String str : list1) {
            System.out.println(str);
        }
    }
}

在这里插入图片描述
私達はまた反復を繰り返してもいいです。listiteratorのhas Provious()方法Cを通して、私達が正順で反復し終わった後、カーソルポインタはもう最後になりました。

System.out.println(iterator1.hasNext());
       System.out.println(iterator1.hasPrevious());
        while(iterator1.hasPrevious()){
            System.out.println(iterator1.previous());
        }
    }
補足:ListIteratorとIteratorのディテールの違い
a、listIteratorはIteratorから継承され、継承構造は以下の通りです。

public interface ListIterator<E> extends Iterator<E>
b、Iteratorディケンサは3つの方法しかなく、それぞれhas Next()、next()とremove()であり、順次巡回と元素の削除を実現することができる。私たちは、重ね着を使ってリストセットの要素を削除します。

System.out.println("
Iterator remove :"); Iterator<String> iterator3 = list.iterator(); while(iterator3.hasNext()){ String value = iterator3.next(); // 5 if("5".equals(value)){ iterator3.remove(); } } for(String s:list){ System.out.print(s+" "); }
ListIteratorディケンサは上のIteratorの機能を実現する以外に、add()の方法で要素を追加することができます。

System.out.println("
ListIterator remove :"); ListIterator<String> iterator4 = list.listIterator(); while(iterator4.hasNext()){ String value = iterator4.next(); if("2".equals(value)){ iterator4.remove(); } } // iterator4.add("5"); iterator4.add("6"); for(String s:list){ System.out.print(s+" "); }
c、ListIteratorは逆順巡回をサポートしています。has Prvious()とprevious()を使用してlistの逆順巡回を実現できます。

System.out.println("
ListIterator :"); while(iterator4.hasPrevious()){ String value = iterator4.previous(); System.out.print(value+" "); }
d、ListIteratorサポート要素の修正は、set方法によってlistの既存の要素を修正することができます。注意してください。修正されたのはリストの要素で、現在のローズマリーの要素の変更は有効ではないかもしれません。

System.out.println("
ListIterator :"); while(iterator4.hasNext()){ String value = iterator4.next(); iterator4.set(value+"-"); System.out.print(value+" "); } System.out.println(); for(String s:list){ System.out.print(s+" "); }
ここで、JavaのIteratorとListIteratorの反復の違いについての文章を紹介します。もっと関連しているJava IteratorとListIteratorの反復の内容は以前の文章を検索してください。または以下の関連記事を引き続きご覧ください。これからもよろしくお願いします。