Java迭代器
通常,您需要遍歷集合中的元素。例如,您可能想要顯示每個元素。最簡單的方法是使用迭代器,迭代器是一個實現Iterator或ListIterator介面的物件。
迭代器使您可以遍歷集合,獲取或刪除元素。ListIterator擴充套件了Iterator,允許對列表進行雙向遍歷以及修改元素。
在您可以透過迭代器訪問集合之前,必須先獲取一個迭代器。每個集合類都提供一個iterator()方法,該方法返回指向集合開頭的迭代器。透過使用此迭代器物件,您可以一次訪問集合中的每個元素。
一般來說,要使用迭代器遍歷集合的內容,請遵循以下步驟:
透過呼叫集合的iterator()方法,獲取指向集合開頭的迭代器。
設定一個迴圈,呼叫hasNext()。只要hasNext()返回true,迴圈就繼續迭代。
在迴圈中,透過呼叫next()獲取每個元素。
對於實現List的集合,您還可以透過呼叫ListIterator來獲取迭代器。
迭代器宣告的方法
序號 | 方法及描述 |
---|---|
1 | boolean hasNext( ) 如果還有更多元素,則返回true。否則,返回false。 |
2 | Object next( ) 返回下一個元素。如果沒有下一個元素,則丟擲NoSuchElementException異常。 |
3 | void remove( ) 刪除當前元素。如果嘗試呼叫remove()而沒有在前面呼叫next(),則丟擲IllegalStateException異常。 |
ListIterator宣告的方法
序號 | 方法及描述 |
---|---|
1 | void add(Object obj) 在下一個next()呼叫將返回的元素前面,將obj插入列表中。 |
2 | boolean hasNext( ) 如果存在下一個元素,則返回true。否則,返回false。 |
3 | boolean hasPrevious( ) 如果存在前一個元素,則返回true。否則,返回false。 |
4 | Object next( ) 返回下一個元素。如果沒有下一個元素,則丟擲NoSuchElementException異常。 |
5 | int nextIndex( ) 返回下一個元素的索引。如果沒有下一個元素,則返回列表的大小。 |
6 | Object previous( ) 返回前一個元素。如果沒有前一個元素,則丟擲NoSuchElementException異常。 |
7 | int previousIndex( ) 返回前一個元素的索引。如果沒有前一個元素,則返回-1。 |
8 | void remove( ) 從列表中刪除當前元素。如果在呼叫next()或previous()之前呼叫remove(),則丟擲IllegalStateException異常。 |
9 | void set(Object obj) 將obj賦值給當前元素。這是上次由對next()或previous()的呼叫返回的元素。 |
示例
這是一個演示Iterator和ListIterator的示例。它使用ArrayList物件,但一般原則適用於任何型別的集合。
當然,ListIterator僅適用於實現List介面的那些集合。
import java.util.*; public class IteratorDemo { public static void main(String args[]) { // Create an array list ArrayList al = new ArrayList(); // add elements to the array list al.add("C"); al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); // Use iterator to display contents of al System.out.print("Original contents of al: "); Iterator itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); // Modify objects being iterated ListIterator litr = al.listIterator(); while(litr.hasNext()) { Object element = litr.next(); litr.set(element + "+"); } System.out.print("Modified contents of al: "); itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); // Now, display the list backwards System.out.print("Modified list backwards: "); while(litr.hasPrevious()) { Object element = litr.previous(); System.out.print(element + " "); } System.out.println(); } }
這將產生以下結果:
輸出
Original contents of al: C A E B D F Modified contents of al: C+ A+ E+ B+ D+ F+ Modified list backwards: F+ D+ B+ E+ A+ C+
廣告