Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java APIs 和框架

Java 類引用

Java 有用資源

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() 返回的元素。

示例 1

這是一個演示迭代器的示例。它使用 ArrayList 物件,但一般原則適用於任何型別的集合。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorDemo {

   public static void main(String args[]) {
      // Create an array list
      List<String> 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<String> itr = al.iterator();
      
      while(itr.hasNext()) {
         Object element = itr.next();
         System.out.print(element + " ");
      }
      System.out.println();
   }
}

輸出

Original contents of al: C A E B D F

示例 2

這是一個演示 ListIterator 的示例。它使用 ArrayList 物件,但一般原則適用於任何型別的集合。

當然,ListIterator 僅適用於實現List 介面的那些集合。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class IteratorDemo {

   public static void main(String args[]) {
      // Create an array list
      List<String> 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<String> itr = al.iterator();
      
      while(itr.hasNext()) {
         Object element = itr.next();
         System.out.print(element + " ");
      }
   }
}

輸出

Original contents of al: C A E B D F 

示例 3

這是一個演示 ListIterator 在迭代時修改列表的示例。它使用 ArrayList 物件,但一般原則適用於任何型別的集合。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class IteratorDemo {

   public static void main(String args[]) {
      // Create an array list
      List<String> 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<String> itr = al.iterator();
      
      while(itr.hasNext()) {
         Object element = itr.next();
         System.out.print(element + " ");
      }
      System.out.println();
      
      // Modify objects being iterated
      ListIterator<String> 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+ 
廣告