天天看點

JAVA中ListIterator和Iterator詳解與辨析

    在使用java集合的時候,都需要使用iterator。但是java集合中還有一個疊代器listiterator,在使用list、arraylist、linkedlist和vector的時候可以使用。這兩種疊代器有什麼差別呢?下面我們詳細分析。這裡有一點需要明确的時候,疊代器指向的位置是元素之前的位置,如下圖所示:

JAVA中ListIterator和Iterator詳解與辨析

    這裡假設集合list由四個元素list1、list2、list3和list4組成,當使用語句iterator it = list.iterator()時,疊代器it指向的位置是上圖中iterator1指向的位置,當執行語句it.next()之後,疊代器指向的位置後移到上圖iterator2所指向的位置。

首先看一下iterator和listiterator疊代器的方法有哪些。

iterator疊代器包含的方法有:

hasnext():如果疊代器指向位置後面還有元素,則傳回 true,否則傳回false

next():傳回集合中iterator指向位置後面的元素

remove():删除集合中iterator指向位置後面的元素

listiterator疊代器包含的方法有:

   add(e e): 将指定的元素插入清單,插入位置為疊代器目前位置之前

hasnext():以正向周遊清單時,如果清單疊代器後面還有元素,則傳回 true,否則傳回false

hasprevious():如果以逆向周遊清單,清單疊代器前面還有元素,則傳回 true,否則傳回false

next():傳回清單中listiterator指向位置後面的元素

nextindex():傳回清單中listiterator所需位置後面元素的索引

previous():傳回清單中listiterator指向位置前面的元素

previousindex():傳回清單中listiterator所需位置前面元素的索引

remove():從清單中删除next()或previous()傳回的最後一個元素(有點拗口,意思就是對疊代器使用hasnext()方法時,删除listiterator指向位置後面的元素;當對疊代器使用hasprevious()方法時,删除listiterator指向位置前面的元素)

set(e e):從清單中将next()或previous()傳回的最後一個元素傳回的最後一個元素更改為指定元素e

一.相同點

都是疊代器,當需要對集合中元素進行周遊不需要幹涉其周遊過程時,這兩種疊代器都可以使用。

二.不同點

1.使用範圍不同,iterator可以應用于所有的集合,set、list和map和這些集合的子類型。而listiterator隻能用于list及其子類型。

2.listiterator有add方法,可以向list中添加對象,而iterator不能。

3.listiterator和iterator都有hasnext()和next()方法,可以實作順序向後周遊,但是listiterator有hasprevious()和previous()方法,可以實作逆向(順序向前)周遊。iterator不可以。

4.listiterator可以定位目前索引的位置,nextindex()和previousindex()可以實作。iterator沒有此功能。

5.都可實作删除操作,但是listiterator可以實作對象的修改,set()方法可以實作。iterator僅能周遊,不能修改。

三:iterator和listiterator用法示例

listiterator用法: