集合5-ListIterator接口源碼分析

public interface ListIterator<E> extends Iterator<E>

實(shí)現(xiàn)了Iterator的接口并拓展關(guān)于List的一些操作,前向迭代,后向迭代,刪除、修改、添加元素,獲取迭代游標(biāo)前向后向的索引位置

迭代游標(biāo)的位置
                      Element(0)   Element(1)   Element(2)   ... Element(n-1)
 cursor positions:  ^            ^            ^            ^                  ^

有n個(gè)元素就有n+1個(gè)游標(biāo)的位置,游標(biāo)的當(dāng)前位置上沒有元素,游標(biāo)的位置處于調(diào)用previous和next返回的兩個(gè)元素之間。

boolean hasNext();
E next();

返回當(dāng)前游標(biāo)的下一個(gè)元素,并將游標(biāo)的位置向后移動(dòng)一個(gè)元素的距離

boolean hasPrevious();

判斷當(dāng)前游標(biāo)是否還有上一個(gè)元素

E previous();

返回當(dāng)前游標(biāo)的上一個(gè)元素,并將游標(biāo)的位置向前移動(dòng)一個(gè)元素的距離

int nextIndex();

返回游標(biāo)的下一元素的索引,當(dāng)游標(biāo)位于最后一個(gè)元素的右邊,此時(shí)調(diào)用nextIndex則返回集合的size

int previousIndex();

返回游標(biāo)的上一元素的索引,當(dāng)游標(biāo)位于第一個(gè)元素的左邊,此時(shí)調(diào)用previousIndex則返回 -1

void remove();

刪除上次調(diào)用next或者previous返回的集合元素,在調(diào)用remove方法之前,如果沒有調(diào)用一次next或者previous方法,或者在調(diào)用了next、previous方法之后已經(jīng)調(diào)用過了remove方法或add方法,換句話說距離本次調(diào)用remove方法最近的方法不是next、previous則拋出IllegalStateException異常

void set(E e);

替換上一次調(diào)用next或previous集合的返回值,在調(diào)用set方法之前,如果沒有調(diào)用一次next或者previous方法,或者在調(diào)用了next、previous方法之后已經(jīng)調(diào)用過了remove方法或add方法,換句話說距離本次調(diào)用set方法最近的方法不是next、previous則拋出IllegalStateException異常

void add(E e);

插入元素到游標(biāo)的位置上,正好替代游標(biāo)位置,并將當(dāng)前游標(biāo)位置移動(dòng)到新元素和下一個(gè)元素之間,當(dāng)添加后調(diào)用next返回的是新元素的下一個(gè)元素,調(diào)用previous返回新元素,調(diào)用nextIndex或previous則增加1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容