教程 > Java 教程 > Java 高级 阅读:22

Java 如何使用迭代器(Iterator)

返回 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) 将 obj 插入到将由下一次调用 next() 返回的元素前面的列表中。
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[]) {
      // 创建数组列表
      ArrayList al = new ArrayList();
      
      // 将元素添加到数组列表
      al.add("C");
      al.add("A");
      al.add("E");
      al.add("B");
      al.add("D");
      al.add("F");

      // 使用迭代器显示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();
      
      // 修改被迭代的对象
      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();

      // 现在,向后显示列表
      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+

返回 Java 集合框架

查看笔记

扫码一下
查看教程更方便