使用迭代器访问 Java 集合

原文:https://www.studytonight.com/java/iterator-in-collection.php

要访问集合的元素,如果集合是基于列表的,我们可以使用索引,或者我们需要遍历元素。有三种可能的方式遍历任何集合的元素。

  1. 使用迭代器接口
  2. 使用列表迭代器接口
  3. 使用 for-each 循环

使用迭代器访问元素

迭代器是用于迭代集合元素的接口。它是 java 集合框架的一部分。它提供了一些用于检查和访问集合元素的方法。

迭代器接口用于向前遍历列表,使您能够移除或修改集合的元素。每个集合类都提供iterator()方法来返回一个迭代器。

迭代器接口方法

| 方法 | 描述 | | 布尔值 hasNext() | 如果集合中有更多的元素,则返回 true 。否则,返回 false。 | | E next() | 返回集合中出现的下一个元素。如果没有下一个元素,将引发 NoSuchElementException。 | | 作废remove() | 移除当前元素。如果试图调用前面没有调用next()方法的 remove()方法,将引发 IllegalStateException。 |

迭代器示例

在这个例子中,我们使用的是集合接口的 iterator()方法,该方法返回 Iterator 接口的一个实例。之后我们使用 hasNext()方法,返回 true 集合包含一个元素,在循环中,通过调用next()方法获取每个元素。

import java.util.*;
class Demo
{
  public static void main(String[] args)
  {
    ArrayList< String> ar = new ArrayList< String>();
    ar.add("ab");
    ar.add("bc");
    ar.add("cd");
    ar.add("de");
    Iterator it = ar.iterator();    //Declaring Iterator
    while(it.hasNext())
    {  
      System.out.print(it.next()+" ");
    }
  }
}

ab bc cd de

使用ListIterator访问元素

ListIterator接口用于在向前向后两个方向遍历列表。它只适用于那些实现列表界面的集合。

列表迭代器的方法:

| 方法 | 描述 | | 作废add(E obj) | 将 obj 插入下一次调用 next()方法将返回的元素前面的列表中。 | | 布尔值 hasNext() | 如果有下一个元素,则返回 true。否则,返回 false。 | | 布尔值 hasPrevious() | 如果有前一个元素,则返回 true。否则,返回 false。 | | E next() | 返回下一个元素。如果没有下一个元素,将引发 NoSuchElementException。 | | int nextIndex() | 返回下一个元素的索引。如果没有下一个元素,则返回列表的大小。 | | E previous() | 返回前一个元素。如果没有前一个元素,将引发 NoSuchElementException。 | | int previousIndex() | 返回前一个元素的索引。如果没有上一个元素,则返回-1。 | | 作废remove() | 从列表中移除当前元素。如果在调用 next()或 previous()方法之前调用 remove()方法,将引发 IllegalStateException。 | | 作废set(E obj) | 将 obj 分配给当前元素。这是调用 next()或 previous()方法最后返回的元素。 |

列表迭代器示例

让我们创建一个遍历ArrayList元素的例子。列表迭代器仅适用于列表集合。

import java.util.*;
class Demo
{
  public static void main(String[] args)
  {
    ArrayList< String> ar = new ArrayList< String>();
    ar.add("ab");
    ar.add("bc");
    ar.add("cd");
    ar.add("de");
    ListIterator litr = ar.listIterator();
    while(litr.hasNext())   //In forward direction
    {
      System.out.print(litr.next()+" ");
    }
    while(litr.hasPrevious())   //In backward direction
    {
      System.out.print(litr.previous()+" ");
    }
  }
}

ab bc cd de de cd bc ab

loop 每个循环

for-each版本的for循环也可以用于遍历集合的元素。但这只能在我们不想修改收藏的内容,也不想任何反向访问时使用。for-each循环可以循环通过任何实现Iterable接口的对象集合。

Exmaple(前枫树镇):

import java.util.*;
class Demo
{
  public static void main(String[] args)
  {
    LinkedList< String> ls = new LinkedList< String>();
    ls.add("a");
    ls.add("b");
    ls.add("c");
    ls.add("d");
    for(String str : ls)
    {
      System.out.print(str+" ");
    }
  }
}

a b c d

使用 for 循环遍历

我们可以使用 for 循环遍历集合元素,但只能访问基于索引的集合。例如,list 是基于索引的集合,允许使用索引值访问其元素。

  import java.util.*;
class Demo
{
  public static void main(String[] args)
  {
    LinkedList<String> ls = new LinkedList<String>();
    ls.add("a");
    ls.add("b");
    ls.add("c");
    ls.add("d");
    for(int i = 0; i<ls.size(); i++)
    {
      System.out.print(ls.get(i)+" ");
    }
  }
}

a b c d