Java迭代器


通常,您需要遍歷集合中的元素。例如,您可能想要顯示每個元素。最簡單的方法是使用迭代器,迭代器是一個實現Iterator或ListIterator介面的物件。

迭代器使您可以遍歷集合,獲取或刪除元素。ListIterator擴充套件了Iterator,允許對列表進行雙向遍歷以及修改元素。

在您可以透過迭代器訪問集合之前,必須先獲取一個迭代器。每個集合類都提供一個iterator()方法,該方法返回指向集合開頭的迭代器。透過使用此迭代器物件,您可以一次訪問集合中的每個元素。

一般來說,要使用迭代器遍歷集合的內容,請遵循以下步驟:

  • 透過呼叫集合的iterator()方法,獲取指向集合開頭的迭代器。

  • 設定一個迴圈,呼叫hasNext()。只要hasNext()返回true,迴圈就繼續迭代。

  • 在迴圈中,透過呼叫next()獲取每個元素。

對於實現List的集合,您還可以透過呼叫ListIterator來獲取迭代器。

迭代器宣告的方法

序號方法及描述
1boolean hasNext( )
如果還有更多元素,則返回true。否則,返回false。
2Object next( )
返回下一個元素。如果沒有下一個元素,則丟擲NoSuchElementException異常。
3void remove( )
刪除當前元素。如果嘗試呼叫remove()而沒有在前面呼叫next(),則丟擲IllegalStateException異常。

ListIterator宣告的方法

序號方法及描述
1void add(Object obj)
在下一個next()呼叫將返回的元素前面,將obj插入列表中。
2boolean hasNext( )
如果存在下一個元素,則返回true。否則,返回false。
3boolean hasPrevious( )
如果存在前一個元素,則返回true。否則,返回false。
4Object next( )
返回下一個元素。如果沒有下一個元素,則丟擲NoSuchElementException異常。
5int nextIndex( )
返回下一個元素的索引。如果沒有下一個元素,則返回列表的大小。
6Object previous( )
返回前一個元素。如果沒有前一個元素,則丟擲NoSuchElementException異常。
7int previousIndex( )
返回前一個元素的索引。如果沒有前一個元素,則返回-1。
8void remove( )
從列表中刪除當前元素。如果在呼叫next()或previous()之前呼叫remove(),則丟擲IllegalStateException異常。
9void 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+

更新於:2020年6月23日

414 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告