1. 概述
在这个快速教程中,我们将了解在Java中向后迭代列表的各种方法。
2. Java中的Iterator
Iterator是Java集合框架中的一个接口,它允许我们迭代集合中的元素。它是在Java 1.2中作为Enumeration的替代品引入的。
3. 使用核心Java向后迭代
3.1 反向for循环
最简单的实现是使用for循环从列表的最后一个元素开始,并在到达列表开头时递减索引:
for (int i = list.size(); i-- > 0; ) {
System.out.println(list.get(i));
}
3.2 ListIterator
我们可以使用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](https://search.maven.org/classic/#search | gav | 1 | g%3A”org.apache.commons”ANDa%3A”commons-collections4”)导入最新的依赖项: |
<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()方法,该方法返回所提供列表的反向视图。
可以在[Maven Central](https://search.maven.org/classic/#search | gav | 1 | g%3A”com.google.guava”ANDa%3A”guava”)上找到最新的Guava版本: |
<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上获得。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章