当前位置: 首页 > 文档资料 > 学习 Java 编程 >

使用 Java Iterator(Using Java Iterator)

优质
小牛编辑
134浏览
2023-12-01

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

Iterator使您可以循环访问集合,获取或删除元素。 ListIterator扩展Iterator以允许列表的双向遍历和元素的修改。

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

通常,要使用迭代器循环遍历集合的内容,请按照下列步骤操作 -

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

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

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

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

迭代器声明的方法

Sr.No.方法和描述
1

boolean hasNext( )

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

2

Object next( )

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

3

void remove( )

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

ListIterator声明的方法

Sr.No.方法和描述
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()最后返回的元素。

例子 (Example)

这是一个演示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();
   }
}

这将产生以下结果 -

输出 (Output)

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+