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+ 
广告