Java迭代器


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

迭代器使您可以遍历集合,获取或删除元素。ListIterator扩展了Iterator,允许对列表进行双向遍历以及修改元素。

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

一般来说,要使用迭代器遍历集合的内容,请遵循以下步骤:

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

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

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

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

迭代器声明的方法

序号方法及描述
1boolean hasNext( )
如果还有更多元素,则返回true。否则,返回false。
2Object next( )
返回下一个元素。如果没有下一个元素,则抛出NoSuchElementException异常。
3void remove( )
删除当前元素。如果尝试调用remove()而没有在前面调用next(),则抛出IllegalStateException异常。

ListIterator声明的方法

序号方法及描述
1void add(Object obj)
在下一个next()调用将返回的元素前面,将obj插入列表中。
2boolean hasNext( )
如果存在下一个元素,则返回true。否则,返回false。
3boolean hasPrevious( )
如果存在前一个元素,则返回true。否则,返回false。
4Object next( )
返回下一个元素。如果没有下一个元素,则抛出NoSuchElementException异常。
5int nextIndex( )
返回下一个元素的索引。如果没有下一个元素,则返回列表的大小。
6Object previous( )
返回前一个元素。如果没有前一个元素,则抛出NoSuchElementException异常。
7int previousIndex( )
返回前一个元素的索引。如果没有前一个元素,则返回-1。
8void remove( )
从列表中删除当前元素。如果在调用next()或previous()之前调用remove(),则抛出IllegalStateException异常。
9void set(Object obj)
将obj赋值给当前元素。这是上次由对next()或previous()的调用返回的元素。

示例

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

这将产生以下结果:

输出

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+

更新于:2020年6月23日

414 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.