通常情況下,你會希望遍歷一個集合中的元素。例如,顯示集合中的每個元素。一般遍歷陣列都是採用for迴圈或者增強for,這兩個方法也可以用在集合框架,但是還有一種方法是採用迭代器遍歷集合框架,它是一個物件,實現了Iterator 介面或ListIterator介面。迭代器,使你能夠通過迴圈來得到或刪除集合的元素。ListIterator 繼承了Iterator,以允許雙向遍歷列表和修改元素。Iterator和ListIterator都是泛型介面,它們的 宣告:
interface Iterator<E>
interface ListIterator<E>
default void forEachRemaining(Consumer<? super E> action) |
對於集合中每個未處理的元素,執行action指定的動作(JDK8新增) |
boolean hasNext() |
如果還有更多元素,就返回true,否則返回false |
E next() | 返回下一個元素。如果不存在下一個元素,就丟擲NoSuchElementException異常 |
default void remove() | 移除當前元素。如果在呼叫next()方法之前試圖呼叫remove(),會丟擲異常 |
方法 | 描述 |
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()方法每呼叫一次,指示元素的遊標就會移動一個位置,若連續呼叫兩次就會跳過兩個元素,造成資料的丟失。若想倒序輸出資料,也需要將遊標移動到末尾,否則不能完整的倒序輸出:
。