1. 程式人生 > >Iterator和ListIterator迭代器

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);
    }
}