JavaにおけるIteratorとListIteratorの反復の違い
5764 ワード
反復時にデータを変更できますか?
答えます。Iteratorが反復するとデータを除去できますが、追加はできません。ListIterator反復時にデータを追加して、データを削除して、順番に巡回します。
このディレクタはremove方法しかなく、add方法がないので、データを追加するにはlistオブジェクトに頼らなければなりませんが、この時にリストを通してデータを追加すると、二人が同時に一つのデータを操作するのと同じです。
ListIteratorディケンサは、集合オブジェクトを介して追加することなく、データを追加するために、ディケンサを介して、add方法を提供している。
私達はまた反復を繰り返してもいいです。listiteratorのhas Provious()方法Cを通して、私達が正順で反復し終わった後、カーソルポインタはもう最後になりました。
a、listIteratorはIteratorから継承され、継承構造は以下の通りです。
答えます。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の反復の内容は以前の文章を検索してください。または以下の関連記事を引き続きご覧ください。これからもよろしくお願いします。