在 Java 中迭代列表的方法

评论 0 浏览 0 2018-11-30

1.绪论

迭代一个列表的元素是程序中最常见的任务之一。

在本教程中,我们将回顾在Java中实现这一目的的不同方法。我们将专注于按顺序迭代列表,尽管在反向也很简单。

进一步的阅读。

在Java中对一个集合进行迭代

在Java中对一个Map进行迭代

如何用索引在流上进行迭代

2.for 循环

首先,让我们回顾一下一些for循环的选项。

我们将首先为我们的例子定义一个国家清单。

List<String> countries = Arrays.asList("Germany", "Panama", "Australia");

2.1.基本的for循环

迭代的最常见的流程控制语句是基本的for循环。

for循环定义了三种用分号分隔的语句。第一条语句是初始化语句。第二条定义了终止条件。最后一条语句是更新条款。

在这里,我们只是用一个整数变量作为一个索引。

for (int i = 0; i < countries.size(); i++) {
    System.out.println(countries.get(i));
}

在初始化过程中,我们必须声明一个整数变量来指定起点。这个变量通常作为列表的索引。

终止条件是一个表达式,在评估后返回一个布尔值。一旦这个表达式被评估为false,循环就结束了。

更新子句用于修改索引变量的当前状态,增加或减少它,直到终止点为止。

2.2.增强的for循环

增强的 for 循环是一个简单的结构,它允许我们访问列表中的每个元素。它类似于基本的 for 循环,但更易读和紧凑。因此,它是最常用的遍历列表的形式之一。

请注意,增强的for循环比基本的for循环更简单。

for (String country : countries) {
    System.out.println(country); 
}

3.迭代器

一个Iterator是一个设计模式,它为我们提供了一个标准的接口来遍历一个数据结构,而不必担心内部的实现。

这种遍历数据结构的方式有很多优点,其中我们可以强调的是,我们的代码并不依赖于实现方式。

因此,该结构可以是二叉树或双链表,因为Iterator将我们从执行遍历的方式中抽象出来。通过这种方式,我们可以轻松地在代码中替换数据结构,而不会出现令人不快的问题。

3.1.迭代器

在Java中,Iterator模式体现在java.util.Iterator类中。它被广泛用于Java的Collections中。在Iterator中有两个关键方法,即hasNext()next()方法。

在这里,我们将演示这两种方法的使用。

Iterator<String> countriesIterator = countries.iterator();

while(countriesIterator.hasNext()) {
    System.out.println(countriesIterator.next()); 
}

hasNext()方法检查列表中是否有剩余的元素

next()方法返回迭代中的下一个元素

3.2. 列表迭代器

一个ListIterator允许我们以前向或后向的顺序遍历一个元素的列表。

ListIterator向前滚动一个列表时,遵循了与Iterator类似的机制。这样,我们可以用next()方法将迭代器向前移动,我们可以用hasNext()方法找到列表的末端。

我们可以看到,ListIterator看起来与我们之前使用的Iterator非常相似。

ListIterator<String> listIterator = countries.listIterator();

while(listIterator.hasNext()) {
    System.out.println(listIterator.next());
}

4.forEach()

4.1. Iterable.forEach()

从 Java 8 开始,我们可以使用forEach() 方法迭代列表的元素。此方法在 Iterable 中定义 接口,并且可以接受 Lambda 表达式作为参数。

语法是非常简单的。

countries.forEach(System.out::println);

forEach函数之前,Java中的所有迭代器都是活动的,这意味着它们涉及一个for或while循环,该循环遍历数据集合,直到满足某个条件为止。

随着forEach作为Iterable接口中的一个函数的引入,所有实现Iterable的类都增加了forEach的函数。

4.2.Stream.forEach()

我们还可以将值集合转换为 Stream,并可以访问 forEach()map()filter() 等操作。

在这里,我们将演示流的一个典型用途。

countries.stream().forEach((c) -> System.out.println(c));

5.总结

在这篇文章中,我们演示了使用Java API对列表中的元素进行迭代的不同方法。这些方法包括for循环,增强的for循环,IteratorListIterator,forEach()方法(包含在Java 8中)。

然后我们学习了如何使用forEach()方法来处理Streams

最后,本文中所使用的所有代码都可以在我们的Github repo中找到。

最后更新2023-06-06
0 个评论
标签