CodeGym /Java 博客 /随机的 /Java 迭代器
John Squirrels
第 41 级
San Francisco

Java 迭代器

已在 随机的 群组中发布
你好!在今天的课程中,我们将讨论 Java 迭代器。想象一下,你去图书馆,想找一本特别的书。你怎么做呢?如果是非小说类作品,那就是杜威十进制系统。如果是小说,则按姓氏的字母顺序排序。无论你在找什么,在某个时候,你必须一次一本地翻阅这些书,直到找到你要找的东西。每当您在 Java 中拥有一组东西时,无论它是存储在 Array ArrayList Queue还是List 中您如何找到特定的值?在某些时候,您必须一次一个地检查每个元素。这就是 Java 迭代器的用途。如何使用 Java 迭代器:简要教程 - 1

什么是 Java 中的迭代器

什么是 Java 中的迭代器?它是一种查看集合中每个元素的方法。通过集合,我们指的是Collection类中的任何东西。这包括:
  • 数组列表
  • 哈希集
  • 链接哈希集
  • 链表
  • 优先队列
  • 向量
  • 和许多其他人……
它还包括这些类的各种接口,例如SetListQueueDequeueSorted Set等等。 Iterator<E>是 Interface Iterator<E>类的公共接口方法。它是在 Java 1.2 中引入的,并取代了 Enumeration 作为一种检查集合中顺序元素的方法。

为什么你不应该在 Java 中使用 For 循环作为迭代器

每个人都被教导在 Java 中遍历集合的第一种方法是 for 循环。它看起来像这样:

class Main {
  public static void main(String[] args) {
    int exampleArray[] = new int[10];

    //fill array with data

    for(int x = 0; x < exampleArray.length; x++) {
      System.out.println("Content of element " + x + "is: " + exampleArray[x]);
    }
  }
}
输出将是一个列表,内容如下:

Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
这确实有它的用处,但是如果集合不在基于索引的系统中存储元素会发生什么?例如,Set通常没有顺序。因此,建议放弃在 Java 中使用 for 循环作为迭代器的做法,而改用Iterator<E>类。这里有一些java迭代器的例子。

如何在 Java 中使用迭代器

下面是一些如何在 Java 中使用迭代器的例子。使用迭代器类时,可以通过三种方式遍历集合。您可以使用while()循环、for()循环和forEach()循环。请注意,这个 for 循环与我们之前谈到的那个不同。这是三个不同的 java 迭代器示例。首先,让我们设置要迭代的 Collection 。

import java.util.*; // imports ArrayList, Collection and Iterator

class Main {
  public static void main(String[] args) {
    Collection<String> example = new ArrayList<String>();

    example.add("Item 1");
    example.add("Item 2");
    example.add("Item 3");
    example.add("Item 4");
  }
}
这是一个简单的集合,由我们加载了四个项目的ArrayList组成。现在让我们看看使用 Iterator 类遍历ArrayList的三种方法。

while() 循环


Iterator<String> iterator = example.iterator();

while (iterator.hasNext()) {
   System.out.println("Element Value= " + iterator.next());
}
while()循环使用Iterator类的.hasNext()布尔方法来检查是否存在未来元素。如果前提条件为真,则继续。如果它返回 false,则循环结束。这里的关键部分是 .hasNext ().next()方法都对第一个元素进行初始检查。如果Collection为空且没有第一个元素,则该方法会为.hasNext()返回 false 并将为.next()方法抛出NoSuchElementException

For循环


for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
  System.out.println("Element Value= " + iterator.next());
}
这看起来像是更传统的 for 循环。它使用.hasNext()方法作为条件检查和更改部分。初始化是对迭代器的调用。

对于:每个循环


for (String s : example) {
  System.out.println("Element Value= " + s);
}
For :Each循环是for 循环,但如果您不知道如何阅读它,可能会有些混乱。For:Each循环的语法是for (data_type variableName : collectionName){ body}。这个for:each循环确实有几个缺点。首先,它只能单向遍历集合。其次,您必须遍历每个元素。你不能跳过其中任何一个。但作为 Java 中方便的列表迭代器,它是最佳选择。从好的方面来说,for:each循环非常容易阅读,一旦了解它就很难出错。如果您想知道三个迭代器循环的输出是什么,它们都是一样的:

Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4 

如何在 Java For Maps 中使用迭代器

Map 是一种流行的数据存储方式,但是因为它们没有扩展Collection,所以您不能使用以前的迭代器直接遍历 Map。那么在 Java 中如何使用迭代器遍历MapHashMap呢?有四种很好的 Java 映射迭代器方法。我们将单独介绍它们。首先,让我们加载具有一系列值的地图。

import java.util.*; //imports Map and HashMap

class Main {
  public static void main(String[] args) {
    Map<String, String> example = new HashMap<String, String>();

    example.put("alpha", "one");
    example.put("beta", "two");
    example.put("gamma", "three");

  }
}

Java Hashmap 迭代器方法:forEach(action)


example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
此方法使用 lambda 表达式进行迭代。lambda 运算符是forEach()方法,主体打印出值。这使用多参数运算符。这是 Java 8 中映射迭代器最快、最干净的方法。

Java Hashmap 迭代器方法:For:Each() 循环


for (Map.Entry<String, String> iterate : example.entrySet()) {
  System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
这使用For:Each语法调用entrySet()方法以返回一个以键和值作为其元素的集合。此外,在使用.Entry()方法时,对象仅在发生此迭代时为真。

Java Hashmap 迭代器方法:Map.Entry<k, v>


Iterator<Map.Entry<String, String>> iterator = example.entrySet().iterator();

while(iterator.hasNext()){
  Map.Entry<String, String> element = iterator.next();
  System.out.println("Key: " + element.getKey() + ", Value: " + element.getValue());
)
此方法再次将Map转换为集合以使用Collections Iterator 和方法。对于这三个迭代器方法,返回值如下所示:

Key: alpha, Value: one
Key: beta, Value: two
Key: gamma, Value: three
Java Hashmap Iterator Method: keySet() and values()
for (String key : example.keySet()) {
  System.out.println("Key: " + key);
}
for (String value : example.values()) {
  System.out.println("Value: " + value);
}
这个以不同的方式返回元素。它将首先按顺序返回所有键,然后返回所有值:

Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION