Java - 如何使用迭代器?


通常,您会希望循环访问集合中的元素。例如,您可能想要显示每个元素。最简单的方法是使用迭代器,它是一个实现 Iterator 或 ListIterator 接口的对象。

迭代器使您能够循环访问集合、获取或删除元素。ListIterator 扩展了 Iterator 以允许双向遍历列表以及修改元素。

在通过迭代器访问集合之前,您必须先获取一个集合。每个集合类都提供一个 iterator() 方法,该方法将迭代器返回到集合的开头。通过使用此迭代器对象,您可以访问集合中的每个元素,一次访问一个元素。

一般来说,要使用迭代器循环访问集合的内容,请按照以下步骤操作 -

  • 通过调用集合的 iterator( ) 方法获取到集合开头的迭代器。

  • 设置一个循环来调用 hasNext( )。只要 hasNext() 返回 true,就让循环迭代。

  • 在循环中,通过调用 next( ) 获取每个元素。

对于实现List的集合,还可以通过调用ListIterator来获取迭代器。

Iterator声明的方法

先生。 方法及说明
1

布尔值 h​​asNext( )

如果有更多元素则返回 true。否则,返回 false。

2

对象下一个( )

返回下一个元素。如果没有下一个元素,则抛出 NoSuchElementException。

3

无效删除()

删除当前元素。如果尝试调用remove()但之前没有调用next(),则抛出IllegalStateException。

ListIterator 声明的方法

先生。 方法及说明
1

无效添加(对象 obj)

将 obj 插入列表中下一次调用 next( ) 将返回的元素前面。

2

布尔值 h​​asNext( )

如果存在下一个元素,则返回 true。否则,返回 false。

3

布尔值有上一个( )

如果存在前一个元素,则返回 true。否则,返回 false。

4

对象下一个( )

返回下一个元素。如果没有下一个元素,则会抛出 NoSuchElementException。

5

int 下一个索引( )

返回下一个元素的索引。如果没有下一个元素,则返回列表的大小。

6

对象上一个( )

返回前一个元素。如果不存在前一个元素,则会引发 NoSuchElementException。

7

int 先前索引( )

返回前一个元素的索引。如果不存在前一个元素,则返回 -1。

8

无效删除()

从列表中删除当前元素。如果在调用 next() 或 previous() 之前调用remove(),则会抛出 IllegalStateException。

9

无效集合(对象 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 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+