Iterator和ListIterator的區別

2021-08-19 11:12:13 字數 1095 閱讀 9975

我們在使用list,set的時候,為了實現對其資料的遍歷,我們經常使用到了iterator(跌代器)。使用跌代器,你不需要干涉其遍歷的過程,只需要每次取出乙個你想要的資料進行處理就可以了。 

但是在使用的時候也是有不同的。list和set都有iterator()來取得其迭代器。對list來說,你也可以通過listiterator()取得其迭代器,兩種迭代器在有些時候是不能通用的,iterator和listiterator主要區別在以下方面: 

1.listiterator只能用於list,iterator是通用的

2.iterator容易引起併發修改異常問題,而listiterator可以避免執行緒安全問題的發生,因為其有內建的add()等修改集合的方法。例子如下

public static void main(string[ ] args)

}這段程式在編譯時將會報錯,原因是迭代器在讀取集合時,利用集合物件的add()方法對集合進行了修改,迭代器並不知道集合已經發生變化,而導致迭代發生異常。而使用迭代器物件的add()方法則可以避免這個問題,**如下:

public static void main(string[ ] args)

}3. listiterator和iterator都有hasnext()和next()方法,可以實現順序向後遍歷,但是listiterator有hasprevious()和previous()方法,可以實現逆向(順序向前)遍歷。iterator就不可以。 

4. listiterator可以定位當前的索引位置,nextindex()和previousindex()可以實現。iterator沒有此功能。 

5. 都可實現刪除物件,但是listiterator可以實現物件的修改,set()方法可以實現。iierator僅能遍歷,不能修改。 

因為listiterator的這些功能,可以實現對linkedlist等list資料結構的操作。其實,陣列物件也可以用迭代器來實現。 

org.apache.commons.collections.iterators.arrayiterator就可以實現此功能。一般情況下,我們使用iterator就可以了,如果你需要進行記錄的前後反覆檢索的話,你就可以使用listiterator來擴充套件你的功能,(有點象jdbc中的滾動結果集)

Iterator和listIterator的區別

我們在使用list,set的時候,為了實現對其資料的遍歷,我們經常使用到了iterator 迭代器 使用迭代器,你不需要干涉其遍歷的過程,只需要每次取出乙個你想要的資料進行處理就可以了。但是在使用的時候也是有不同的。list和set都有iterator 來取得其迭代器。對list來說,你也可以通過l...

Iterator和listIterator的區別

我們在使用list,set的時候,為了實現對其資料的遍歷,我們經常使用到了iterator 迭代器 使用迭代器,你不需要干涉其遍歷的過程,只需要每次取出乙個你想要的資料進行處理就可以了。但是在使用的時候也是有不同的。list和set都有iterator 來取得其迭代器。對list來說,你也可以通過l...

iterator和listiterator的異同

我們在使用list,set的時候,為了實現對其資料的遍歷,我們經常使用到了iterator 跌代器 使用跌代器,你不需要干涉其遍歷的過程,只需要每次取出乙個你想要的資料進行處理就可以了。但是在使用的時候也是有不同的。list和set都有iterator 來取得其迭代器。對list來說,你也可以通過l...