軟件包java.util迭代器(Iterator);官方介紹對collection進行迭代的迭代器。迭代器取代了java.collection.Framework中的Enumeration。迭代器與枚舉的不同點:
- 迭代器允許調用者利用定義良好的語義在迭代期間從迭代器所指向的 collection 移除元素。
- 方法名稱得到了改進。
屬於java.collection.Framework中的成員。
三個原始方法:
boolean hasNext();
//如果仍有元素可以迭代,則返回true.
判斷一組對象迭代的過程中,是否有下一個元素需要迭代,對象末尾或沒有元素則返回false不需要迭代。
E next();
//返回迭代器中的下一個元素。
default void remove() {
throw new UnsupportedOperationException("remove");
}
從迭代器指向的 collection 中移除迭代器返回的最後一個元素(可選操作)。每次調用 next 只能調用一次此方法。如果進行迭代時用調用此方法之外的其他方式修改了該迭代器所指向的 collection,則迭代器的行爲是不確定的。
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
1.8新增的默認方法,
對每個剩餘元素執行給定的操作,直到所有元素都被處理或動作引發異常。 如果指定了該順序,則按迭代的順序執行操作。 動作拋出的異常被轉發給調用者。
public interface ListIterator<E> extends Iterator<E>
用於允許程序員沿任一方向遍歷列表的列表的迭代器,在迭代期間修改列表,並獲取列表中迭代器的當前位置。
ListIterator
沒有電流元素; 其光標位置始終位於通過調用previous()
返回的元素和通過調用next()
返回的元素next()
。
長度爲n
的列表的迭代器具有n+1
可能的光標位置,如下圖所示的所示:
備註:向前遍歷/向後遍歷 隱藏光標在元素的前面或後面,兩個元素的中間。
Element(0) Element(1) Element(2) ... Element(n-1)
cursor positions: ^ ^ ^ ^ ^
請注意, remove()
和set(Object)
方法未按光標位置進行定義; 它們被定義爲對調用next()
或previous()
返回的最後一個元素進行操作。
//如果以逆向遍歷列表,列表迭代器有多個元素,則返回 true。
boolean hasPrevious();
//返回列表中的前一個元素。
E previous();
//返回對 previous 的後續調用所返回元素的索引。
int previousIndex();
//用指定元素替換 next 或 previous 返回的最後一個元素(可選操作)。
用指定元素替換 next 或 previous 返回的最後一個元素(可選操作)。
只有在最後一次調用 next 或 previous 後既沒有調用 ListIterator.remove
也沒有調用 ListIterator.add 時纔可以進行該調用。
void set(E e);
//將指定的元素插入列表(可選操作)。
該元素直接插入到 next 返回的下一個元素的前面(如果有),
或者 previous 返回的下一個元素之後(如果有);
如果列表沒有元素,那麼新元素就成爲列表中的唯一元素。
新元素被插入到隱式光標前:不影響對 next 的後續調用,
並且對 previous 的後續調用會返回此新元素
(此調用把調用 nextIndex 或 previousIndex 所返回的值增加 1)。
void add(E e);