Java面試知識點(二十六)迭代器iterator

迭代器是一種設計模式,它是一個對象,它可以遍歷並選擇序列中的對象,而開發人員不需要了解該序列的底層結構。迭代器通常被稱爲 “輕量級” 對象,因爲創建它的代價小。

Java 中的 Iterator 功能比較簡單,並且只能單向移動:

(1) 使用方法 iterator () 要求容器返回一個 Iterator。第一次調用 Iterator 的 next () 方法時,它返回序列的第一個元素。注意:iterator () 方法是 java.lang.Iterable 接口,被 Collection 繼承。

(2) 使用 next () 獲得序列中的下一個元素。

(3) 使用 hasNext () 檢查序列中是否還有元素。

(4) 使用 remove () 將迭代器新返回的元素刪除。

Iterator 是 Java 迭代器最簡單的實現,爲 List 設計的 ListIterator 具有更多的功能,它可以從兩個方向遍歷 List,也可以從 List 中插入和刪除元素。

實例代碼:
list 是一個 ArrayList 的對象,哪個選項的代碼填到 //todo delete 處,可以在 Iterator 遍歷的過程中正確並安全的刪除一個 list 中保存的對象

Iterator it = list.iterator();
int index = 0;
while (it.hasNext())
{
    Object obj = it.next();
    if (needDelete(obj))  //needDelete返回boolean,決定是否要刪除
    {
        //todo delete
    }
    index ++;
}

答案:it.remove();
注意不能選list.remove();

Iterator 支持從源集合中安全地刪除對象,只需在 Iterator 上調用 remove() 即可。這樣做的好處是可以避免 ConcurrentModifiedException(同時發生被改進異常) ,當打開 Iterator 迭代集合時,同時又在對集合進行修改。有些集合不允許在迭代時刪除或添加元素,但是調用 Iterator 的 remove() 方法是個安全的做法。 因爲它的 remove () 方法不僅會刪除元素,還會維護一個標誌,用來記錄目前是不是可刪除狀態,例如,你不能連續兩次調用它的 remove () 方法,調用之前至少有一次 next () 方法的調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章