JDK源码解析之java.util.ListIterator
生活随笔
收集整理的這篇文章主要介紹了
JDK源码解析之java.util.ListIterator
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ListIterator是一個(gè)功能更加強(qiáng)大的迭代器接口, 它繼承于Iterator接口,只能用于各種List類型的訪問。可以通過調(diào)用listIterator()方法產(chǎn)生一個(gè)指向List開始處的ListIterator, 還可以調(diào)用listIterator(n)方法創(chuàng)建一個(gè)一開始就指向列表索引為n的元素處的ListIterator。
一、源碼解析
public interface ListIterator<E> extends Iterator<E> {// Query Operations// 以正向遍歷列表時(shí),如果列表迭代器有多個(gè)元素,則返回trueboolean hasNext();// 返回列表中的下一個(gè)元素E next();// 如果以逆向遍歷列表集合,列表迭代器有多個(gè)元素,則返回trueboolean hasPrevious();// 返回列表集合中前一個(gè)元素E previous();// 返回對(duì)next的后續(xù)調(diào)用所返回的元素的索引int nextIndex();// 返回對(duì)previous的后續(xù)調(diào)用所返回元素的索引int previousIndex();// Modification Operations// 從列表中移除由next或previous返回的最后一個(gè)元素void remove();// 用指定元素替換next或者previous返回的最后一個(gè)元素void set(E e);//將指定的元素插入列表void add(E e); }由以上源碼內(nèi)容可以看出可以ListIterator的特點(diǎn):
(1)雙向移動(dòng)(向前/向后遍歷).
(2)產(chǎn)生相對(duì)于迭代器在列表中指向的當(dāng)前位置的前一個(gè)和后一個(gè)元素的索引.
(3)可以使用set()方法替換它訪問過的最后一個(gè)元素.
(4)可以使用add()方法在next()方法返回的元素之前或previous()方法返回的元素之后插入一個(gè)元素.
二、ListIterator與Iterator的區(qū)別
一.相同點(diǎn)
都是迭代器,當(dāng)需要對(duì)集合中元素進(jìn)行遍歷不需要干涉其遍歷過程時(shí),這兩種迭代器都可以使用。
二.不同點(diǎn)
- 使用范圍不同,Iterator可以應(yīng)用于所有的集合,Set、List和Map和這些集合的子類型。而ListIterator只能用于List及其子類型。
- ListIterator有add方法,可以向List中添加對(duì)象,而Iterator不能。
- ListIterator和Iterator都有hasNext()和next()方法,可以實(shí)現(xiàn)順序向后遍歷,但是ListIterator有hasPrevious()和previous()方法,可以實(shí)現(xiàn)逆向(順序向前)遍歷。Iterator不可以。
- ListIterator可以定位當(dāng)前索引的位置,nextIndex()和previousIndex()可以實(shí)現(xiàn)。Iterator沒有此功能。
- 都可實(shí)現(xiàn)刪除操作,但是ListIterator可以實(shí)現(xiàn)對(duì)象的修改,set()方法可以實(shí)現(xiàn)。Iterator僅能遍歷,不能修改。
總結(jié)
以上是生活随笔為你收集整理的JDK源码解析之java.util.ListIterator的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过Flume简单实现Kafka与Hiv
- 下一篇: PARALLEL(并行)