向后迭代一个列表
1.概述
在这个快速教程中,我们将学习在Java中向后迭代一个列表的各种方法。
2.Java中的迭代器
一个Iterator是Java 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上找到,。