ListIterator是一個功能更加強大的迭代器接口, 它繼承于Iterator接口,只能用于各種List類型的訪問。可以通過調用listIterator()方法產生一個指向List開始處的ListIterator, 還可以調用listIterator(n)方法創建一個一開始就指向列表索引為n的元素處的ListIterator。
一、源碼解析
public interface ListIterator<E> extends Iterator<E> {// Query Operations// 以正向遍歷列表時,如果列表迭代器有多個元素,則返回trueboolean hasNext();// 返回列表中的下一個元素E next();// 如果以逆向遍歷列表集合,列表迭代器有多個元素,則返回trueboolean hasPrevious();// 返回列表集合中前一個元素E previous();// 返回對next的后續調用所返回的元素的索引int nextIndex();// 返回對previous的后續調用所返回元素的索引int previousIndex();// Modification Operations// 從列表中移除由next或previous返回的最后一個元素void remove();// 用指定元素替換next或者previous返回的最后一個元素void set(E e);//將指定的元素插入列表void add(E e);
}
由以上源碼內容可以看出可以ListIterator的特點:
(1)雙向移動(向前/向后遍歷).
(2)產生相對于迭代器在列表中指向的當前位置的前一個和后一個元素的索引.
(3)可以使用set()方法替換它訪問過的最后一個元素.
(4)可以使用add()方法在next()方法返回的元素之前或previous()方法返回的元素之后插入一個元素.
二、ListIterator與Iterator的區別
一.相同點
都是迭代器,當需要對集合中元素進行遍歷不需要干涉其遍歷過程時,這兩種迭代器都可以使用。
二.不同點
- 使用范圍不同,Iterator可以應用于所有的集合,Set、List和Map和這些集合的子類型。而ListIterator只能用于List及其子類型。
- ListIterator有add方法,可以向List中添加對象,而Iterator不能。
- ListIterator和Iterator都有hasNext()和next()方法,可以實現順序向后遍歷,但是ListIterator有hasPrevious()和previous()方法,可以實現逆向(順序向前)遍歷。Iterator不可以。
- ListIterator可以定位當前索引的位置,nextIndex()和previousIndex()可以實現。Iterator沒有此功能。
- 都可實現刪除操作,但是ListIterator可以實現對象的修改,set()方法可以實現。Iterator僅能遍歷,不能修改。