在使用java集合的時候,都需要使用Iterator。但java集合中還有一個迭代器ListIterator,在使用List、ArrayList、LinkedList和Vector的時候可以使用。這兩種迭代器有什麼差別呢?下面我們詳細分析。這裡有一點需要明確的時候,迭代器指向的位置是元素之前的位置,如下圖所示:
這裡假設集合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指向位置前面元素的索引
previous():傳回清單中ListIterator指向位置前面的元素
previous():傳回清單中的元素。
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用法:
package com.collection;
import java.util.ListS.