Java コレクションを使用する場合は、Iterator を使用する必要があります。ただし、Java コレクションにはイテレータ ListIterator もあり、List、ArrayList、LinkedList、Vector を使用するときに使用できます。これら 2 つのイテレータの違いは何ですか?以下で詳しく分析してみましょう。ここで明確にする必要があるのは、次の図に示すように、反復子が指す位置は要素の前の位置であるということです:
ここでは、コレクション List が 4 つの要素 List1、 List2、List3、List4 ステートメント It = List.Iterator() を使用する場合、イテレータが指す位置は、ステートメント it.next() が実行された後、上図の Iterator1 が指す位置になります。 iterator が指す位置は、上図の Iterator2 が指す位置に移動します。
まず、Iterator と ListIterator のメソッドを見てみましょう。
Iterator には以下のメソッドが含まれます:
hasNext(): Iterator が指す位置の後に要素がある場合は true を返し、そうでない場合は false を返します
next(): Iterator が指す位置の後の要素を返しますset
Remove(): Iterator が指す位置以降のコレクション内の要素を削除します。 ListIterator に含まれるメソッドは次のとおりです:
add(E e): 指定された要素をリストに挿入し、挿入位置を指定します。
hasNext(): リストを順方向に走査するとき、リスト反復子の後に要素がある場合は true を返し、そうでない場合は false を返します。
hasPrevious(): 走査する場合逆方向のリストで、リスト反復子の前に要素がある場合は true を返し、それ以外の場合は false を返します
next(): ListIterator が指す位置以降のリスト内の要素を返します
nextIndex(): を返しますリスト内の ListIterator によって要求される位置の後の要素のインデックス
previous(): ListIterator によって指定される位置より前のリスト内の要素を返します
previousIndex(): 必要な位置の前の要素のインデックスを返しますリスト内の ListIterator の
remove(): next() またはprevious() によって返された最後の要素をリストから削除します (少し紛らわしいですが、 iterator で hasNext() を使用することを意味します) メソッド、位置の後の要素を削除しますListIterator が指す; イテレータで hasPrevious() メソッドを使用する場合、ListIterator が指す位置より前の要素を削除します)
set(E e): リストから next() またはprevious() を削除します 返される最後の要素返された要素は、指定された要素 e
one に変更されます。同じもの
は反復子です。走査プロセスを妨げずにコレクション内の要素を走査する必要がある場合、両方の反復子を使用できます。
2.違い
1. 使用範囲が異なるため、Iterator はすべてのコレクション、Set、List、Map とこれらのコレクションのサブタイプに適用できます。 ListIterator は、List とそのサブタイプにのみ使用できます。
2. ListIterator にはオブジェクトを List に追加できる add メソッドがありますが、Iterator には追加できません。
3. ListIterator と Iterator の両方には、順次後方走査を実現できる hasNext() メソッドと next() メソッドがありますが、ListIterator には逆方向 (逐次前方) 走査を実現できる hasPrevious() メソッドとPrevious() メソッドがあります。イテレータではできません。
4.ListIterator は現在のインデックスの位置を見つけることができ、nextIndex() とpreviousIndex() はこれを実現できます。イテレータにはこの機能はありません。
5. どちらも削除操作を実装できますが、ListIterator はオブジェクトの変更を実装でき、set() メソッドはそれを実現できます。イテレータはトラバースのみ可能であり、変更することはできません。
3: Iterator と ListIterator の使用例
ListIterator の使用例:
package com.collection;
import java.util.LinkedList;
import java.util.List;import java.util.ListIterator;
public class ListIteratorTest { public static void main(String[] args) { // TODO Auto-generated method stub List<String> staff = new LinkedList<>(); staff.add("zhuwei"); staff.add("xuezhangbin"); staff.add("taozhiwei"); ListIterator<String> iter = staff.listIterator(); String first = iter.next(); //删除zhuwei iter.remove(); //把zhuwei改为simei //iter.set("simei"); System.out.println("first:"+first); iter.add("xiaobai"); //遍历List元素 System.out.println("遍历List中元素,方法一:"); for(String str : staff) System.out.println(str+" "); iter = staff.listIterator(); System.out.println("遍历List中元素,方法二:"); while(iter.hasNext()) { System.out.println(iter.next()); } } }