Java學習之集合框架的迭代器--Iteratorjk及ListItertor介面

忘塵天外天發表於2017-07-29

  通常情況下,你會希望遍歷一個集合中的元素。例如,顯示集合中的每個元素。一般遍歷陣列都是採用for迴圈或者增強for,這兩個方法也可以用在集合框架,但是還有一種方法是採用迭代器遍歷集合框架,它是一個物件,實現了Iterator 介面或ListIterator介面。迭代器,使你能夠通過迴圈來得到或刪除集合的元素。ListIterator 繼承了Iterator,以允許雙向遍歷列表和修改元素。Iterator和ListIterator都是泛型介面,它們的 宣告:

  interface  Iterator<E>

  interface  ListIterator<E>

Iterator介面宣告的方法
default  void forEachRemaining(Consumer<? super E> action)

對於集合中每個未處理的元素,執行action指定的動作(JDK8新增)

boolean  hasNext()

如果還有更多元素,就返回true,否則返回false 

E  next() 返回下一個元素。如果不存在下一個元素,就丟擲NoSuchElementException異常
default  void  remove() 移除當前元素。如果在呼叫next()方法之前試圖呼叫remove(),會丟擲異常

 

ListIterator介面宣告的方法
方法 描述
void  add(E  obj) 將obj插入到列表中,新插入的元素位於下一次next()方法呼叫返回的元素之前
boolean  hasNext() 如果存在下一個元素就返回true,否則就返回false
boolean  hasPrevious() 如果存在前一個元素,就返回true,否則返回false
E next() 返回下一個元素。如果不存在下一個元素,就丟擲NoSuchElementException異常
int  nextIndex() 返回下一個元素的索引。如果不存在下一個元素,就返回列表的大小
E  previous() 返回前一個元素。如果不存在前一個元素,就丟擲NoSuchElementException異常
int  previousIndex() 返回前一個元素的索引。如果不存在前一個元素,就返回  -1
void  remove() 從列表中移除當前元素。如果在呼叫next()或previous()方法之前呼叫remove()方法,就會丟擲IllegalStateException 異常
void  set(E  obj) 將obj的值賦給當前元素,也就是next()或previous()方法呼叫最後返回的元素

只有實現List介面的集合才能使用 ListIterator。

迭代器的next()方法每呼叫一次,指示元素的遊標就會移動一個位置,若連續呼叫兩次就會跳過兩個元素,造成資料的丟失。若想倒序輸出資料,也需要將遊標移動到末尾,否則不能完整的倒序輸出:

相關文章