ListIterator和Iterator區(qū)別

在使用java集合的時(shí)候,都需要使用Iterator。但是java集合中還有一個(gè)迭代器ListIterator,在使用List、ArrayList肥隆、LinkedList和Vector的時(shí)候可以使用。這兩種迭代器有什么區(qū)別呢草雕?下面我們?cè)敿?xì)分析巷屿。這里有一點(diǎn)需要明確的時(shí)候,迭代器指向的位置是元素之前的位置墩虹,如下圖所示:


這里假設(shè)集合List由四個(gè)元素List1嘱巾、List2、List3和List4組成诫钓,當(dāng)使用語(yǔ)句Iterator it = List.Iterator()時(shí)旬昭,迭代器it指向的位置是上圖中Iterator1指向的位置,當(dāng)執(zhí)行語(yǔ)句it.next()之后菌湃,迭代器指向的位置后移到上圖Iterator2所指向的位置问拘。
首先看一下Iterator和ListIterator迭代器的方法有哪些。

Iterator迭代器包含的方法有:

  • hasNext():如果迭代器指向位置后面還有元素惧所,則返回 true骤坐,否則返回false
  • next():返回集合中Iterator指向位置后面的元素
  • remove():刪除集合中Iterator指向位置后面的元素

ListIterator迭代器包含的方法有:

  • add(E e): 將指定的元素插入列表,插入位置為迭代器當(dāng)前位置之前
  • hasNext():以正向遍歷列表時(shí)下愈,如果列表迭代器后面還有元素纽绍,則返回 true,否則返回false
  • hasPrevious():如果以逆向遍歷列表势似,列表迭代器前面還有元素拌夏,則返回 true僧著,否則返回false
  • next():返回列表中ListIterator指向位置后面的元素
  • nextIndex():返回列表中ListIterator所需位置后面元素的索引
  • previous():返回列表中ListIterator指向位置前面的元素
  • previousIndex():返回列表中ListIterator所需位置前面元素的索引
  • remove():從列表中刪除next()或previous()返回的最后一個(gè)元素(有點(diǎn)拗口,意思就是對(duì)迭代器使用hasNext()方法時(shí)障簿,刪除ListIterator指向位置后面的元素盹愚;當(dāng)對(duì)迭代器使用hasPrevious()方法時(shí),刪除ListIterator指向位置前面的元素)
    set(E e):從列表中將next()或previous()返回的元素更改為指定元素e

一.相同點(diǎn)

都是迭代器站故,當(dāng)需要對(duì)集合中元素進(jìn)行遍歷不需要干涉其遍歷過程時(shí)皆怕,這兩種迭代器都可以使用。

二.不同點(diǎn)

  • 1.使用范圍不同世蔗,Iterator可以應(yīng)用于所有的集合端逼,Set、List和Map和這些集合的子類型污淋。而ListIterator只能用于List及其子類型
  • 2.ListIterator有add方法余掖,可以向List中添加對(duì)象寸爆,而Iterator不能。
  • 3.ListIterator和Iterator都有hasNext()和next()方法盐欺,可以實(shí)現(xiàn)順序向后遍歷赁豆,但是ListIterator有hasPrevious()和previous()方法,可以實(shí)現(xiàn)逆向(順序向前)遍歷冗美。Iterator不可以魔种。
  • 4.ListIterator可以定位當(dāng)前索引的位置,nextIndex()和previousIndex()可以實(shí)現(xiàn)粉洼。Iterator沒有此功能节预。
  • 5.都可實(shí)現(xiàn)刪除操作,但是ListIterator可以實(shí)現(xiàn)對(duì)象的修改属韧,set()方法可以實(shí)現(xiàn)安拟。Iterator僅能遍歷,不能修改宵喂。

三:Iterator和ListIterator用法示例

ListIterator用法:

package com.collection;  
  
import java.util.LinkedList;  
import java.util.List;  
import java.util.ListIterator;  
  
/** 
 * @author 朱偉 
 * 鏈表中ListIterator測(cè)試 
 * 
 */  
public class ListIteratorTest {  
  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        List<String> staff = new LinkedList<>();  
        staff.add("zhuwei");  
        staff.add("xuezhangbin");  
        staff.add("taozhiwei");  
        ListIterator<String> iter = staff.listIterator();  
        String first = iter.next();  
          
        //刪除zhuwei  
        iter.remove();  
          
        //把zhuwei改為simei  
        //iter.set("simei");  
        System.out.println("first:"+first);  
          
        iter.add("xiaobai");  
          
        //遍歷List元素  
        System.out.println("遍歷List中元素糠赦,方法一:");  
        for(String str : staff)  
            System.out.println(str+"   ");  
          
        iter = staff.listIterator();  
        System.out.println("遍歷List中元素,方法二:");  
        while(iter.hasNext())  
        {  
            System.out.println(iter.next());  
        }  
    }  
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锅棕,一起剝皮案震驚了整個(gè)濱河市拙泽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌裸燎,老刑警劉巖顾瞻,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異顺少,居然都是意外死亡朋其,警方通過查閱死者的電腦和手機(jī)王浴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梅猿,“玉大人氓辣,你說我怎么就攤上這事「を荆” “怎么了钞啸?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)喇潘。 經(jīng)常有香客問我体斩,道長(zhǎng),這世上最難降的妖魔是什么颖低? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任絮吵,我火速辦了婚禮,結(jié)果婚禮上忱屑,老公的妹妹穿的比我還像新娘蹬敲。我一直安慰自己,他們只是感情好莺戒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布伴嗡。 她就那樣靜靜地躺著,像睡著了一般从铲。 火紅的嫁衣襯著肌膚如雪瘪校。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天名段,我揣著相機(jī)與錄音阱扬,去河邊找鬼。 笑死吉嫩,一個(gè)胖子當(dāng)著我的面吹牛价认,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播自娩,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼用踩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了忙迁?” 一聲冷哼從身側(cè)響起脐彩,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姊扔,沒想到半個(gè)月后惠奸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恰梢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年佛南,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梗掰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嗅回,死狀恐怖及穗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绵载,我是刑警寧澤埂陆,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站娃豹,受9級(jí)特大地震影響焚虱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜懂版,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一鹃栽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躯畴,春花似錦谍咆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酸纲。三九已至,卻和暖如春纤怒,著一層夾襖步出監(jiān)牢的瞬間黄娘,已是汗流浹背峭状。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逼争,地道東北人优床。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像誓焦,于是被迫代替她去往敵國(guó)和親胆敞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

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

  • 1 場(chǎng)景問題# 1.1 工資表數(shù)據(jù)的整合## 考慮這樣一個(gè)實(shí)際應(yīng)用:整合工資表數(shù)據(jù)杂伟。 這個(gè)項(xiàng)目的背景是這樣的移层,項(xiàng)目...
    七寸知架構(gòu)閱讀 2,522評(píng)論 0 53
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 869評(píng)論 0 1
  • Iterator類 對(duì) collection 進(jìn)行迭代的迭代器 提供的方法: hasNext() 如果仍有元素可...
    MLLWF閱讀 361評(píng)論 0 0
  • Collection接口 Collection接口是所有集合的祖先類。他有兩個(gè)構(gòu)造方法赫粥,一個(gè)無參構(gòu)造观话,一個(gè)是帶Co...
    夜幕繁華閱讀 583評(píng)論 0 0
  • 第十天 權(quán)限修飾符 public protected default private 同一類 true true ...
    炙冰閱讀 525評(píng)論 0 1