Iterator和ListIterator迭代器
在使用java集合的時候,都需要使用Iterator。但是java集合中還有一個迭代器ListIterator,在使用List、ArrayList、LinkedList和Vector的時候可以使用。這兩種迭代器有什麼區別呢?下面我們詳細分析。這裡有一點需要明確的時候,迭代器指向的位置是元素之前的位置,如下圖所示:
這裡假設集合List由四個元素List1、List2、List3和List4組成,當使用語句Iterator it = List.Iterator()時,迭代器it指向的位置是上圖中Iterator1指向的位置,當執行語句it.next()之後,迭代器指向的位置後移到上圖Iterator2所指向的位置。
一.相同點
都是迭代器,當需要對集合中元素進行遍歷不需要干涉其遍歷過程時,這兩種迭代器都可以使用。
二.不同點
1.使用範圍不同,Iterator可以應用於所有的集合,Set、List和Map和這些集合的子型別。而ListIterator只能用於List及其子型別。
2.ListIterator有add方法,可以向List中新增物件,而Iterator不能。
3.ListIterator和Iterator都有hasNext()和next()方法,可以實現順序向後遍歷,但是ListIterator有hasPrevious()和previous()方法,可以實現逆向(順序向前)遍歷。Iterator不可以。
4.ListIterator可以定位當前索引的位置,nextIndex()和previousIndex()可以實現。Iterator沒有此功能。
5.都可實現刪除操作,但是ListIterator可以實現物件的修改,set()方法可以實現。Iterator僅能遍歷,不能修改。
ListIterator的出現,解決了使用Iterator迭代過程中可能會發生的錯誤情況。
或者像上方那樣break。但是不能迴圈所有元素
public class IteratorDemo2 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
ListIterator<String> listit=list.listIterator();
while(listit.hasNext()){
if(listit.next().equals("b")){
/**
* ListIterator有add和remove方法,可以向List中新增物件
*/
listit.remove();
listit.add("itcast");
}
}
// Iterator<String> it=list.iterator();
// while(it.hasNext()){
// if(it.next().equals("b")){
// list.remove(0);
// if(list.add("itcast")){
// break;//新增成功以後直接break;不繼續判斷就可以躲過異常
// }
// }
// }
System.out.println(list);
}
}