向后迭代一个列表

评论 0 浏览 0 2018-07-04

1.概述

在这个快速教程中,我们将学习在Java中向后迭代一个列表的各种方法。

2.Java中的迭代器

一个IteratorJava Collections Framework中的一个接口,它允许我们在一个集合中的元素上进行迭代。它是在Java 1.2中引入的,用来替代Enumeration

3.使用Core Java向后迭代

3.1.反转 for 循环

最简单的实现是使用一个for 循环来从列表的最后一个元素开始,并在到达列表开头时递减索引:

for (int i = list.size(); i-- > 0; ) {
    System.out.println(list.get(i));
}

3.2. 列表迭代器

我们可以使用一个ListIterator来迭代列表中的元素。

提供列表的大小作为ListIterator的索引,将给我们一个指向列表末尾的迭代器:

ListIterator listIterator = list.listIterator(list.size());

这个迭代器现在允许我们以相反的方向遍历这个列表:

while (listIterator.hasPrevious()) {
    System.out.println(listIterator.previous());
}

3.3. Collections.reverse()

Java中的Collections类提供了一个静态方法来反转指定列表中的元素的顺序:

Collections.reverse(list);

然后,反转的列表可以用来在原始元素上进行反向迭代:

for (String item : list) {
    System.out.println(item);
}

然而,这种方法通过就地改变元素的顺序来颠覆实际的列表,在许多情况下可能并不可取。

4.使用Apache的ReverseListIterator进行逆向迭代

Apache Commons Collections库有一个很好的ReverseListIterator类,它允许我们循环浏览列表中的元素,而不需要真正地反转它。

在开始之前,我们需要从Maven Central中导入最新的依赖项:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.1</version>
</dependency>

我们可以通过传递原始列表作为构造函数参数来创建一个新的ReverseListIterator

ReverseListIterator reverseListIterator = new ReverseListIterator(list);

然后我们可以使用这个迭代器来向后遍历这个列表:

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

5.使用Guava的Lists.reverse()进行逆向迭代

同样,Google Guava库也在其Lists类中提供了一个静态的reverse()方法,该方法返回所提供列表的反向视图。

最新的Guava版本可以在Maven Central上找到:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

Lists类上调用静态方法reverse(),就可以得到反转的列表:

List<String> reversedList = Lists.reverse(list);

然后,反转的列表可以用来在原始列表上向后迭代:

for (String item : reversedList) {
    System.out.println(item);
}

这个方法返回一个新的列表,其中的元素与原列表中的元素顺序相反

6.结语

在这篇文章中,我们研究了在Java中通过列表向后迭代的不同方法。我们经历了一些使用核心Java的例子,以及使用流行的第三方库。

本文的源代码和相关的测试案例可以在GitHub上找到

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