开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
  1. Home
  2. Computer Science
  3. This article

Java 如何逆向遍历一个 List

2022年05月02日 738Browse 0Like 0Comments

概述

在这篇文章中,我们对 Java 如何逆向遍历一个 List 进行了一些简单的描述。

  • 主要的思路就是从正向遍历使用的 i++ 变成 i–
  • 如果使用了迭代器 Iterator 的话,可以使用迭代器的逆向迭代
  • 你还可以直接对 List 进行逆向

Java 中的迭代器 Java

Iterator 是在 Java Collections 框架中的一个接口:Iterator (Java SE 11 & JDK 11 )

在 Java 的 Collections 框架中,允许使用 Iterator 来对 List 中的元素进行遍历。

Iterator 是在 Java 1.2 的版本中推出的,用于替代 JDK 中的 Enumeration。

当然在当前的 JDK 中,你还是能够看到 Enumeration 的影子的。

使用原生 Java 进行逆向迭代

使用 Loop

这种就是最简单的思路的,将正向遍历使用的 i++ 变成 i–。

因为我们使用 i 来表示 List 中元素的下标,如果将 i 的查找方式从前往后变成从后往前,就能够完成 List 的逆向遍历了。

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

ListIterator 迭代器

迭代器 中还有一个 ListIterator 迭代器,在这个 ListIterator 迭代器中,如果你为迭代器提供了 List 的长度的话,这个 ListIterator 迭代器将会将 List 的指针指向到 List 最后的一个元素。

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

然后使用 ListIterator 提供的 hasPrevious 方法,从后往前进行迭代。

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

Collections.reverse() 方法

Collections 是 JDK 提供的一个类,在这个类中,有一个静态 reverse 方法。

使用这个方法将会对你提供的 List 进行逆向排序。

Collections.reverse(list);

对重新排序后的 List,你可以使用正常的迭代器从前往后进行迭代查找。

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

需要注意的是,这个方法将会对输入的 List 顺序进行修改,在很多时候,这个可能是你在编程时候并不希望出现的情况。
many cases.

使用 Apache 的 ReverseListIterator

Apache Commons Collections 工具类中,提供了 ReverseListIterator 类,使用这个类,将会返回逆向 List 的迭代器。

这个方法只会返回逆向迭代器,并不会对输入的 List 进行修改,因此你不需要担心原始输入 List 中元素进行改变的情况。

在使用 Apache Collections 工具类之前,你需要在你的 pom 文件中添加下面的内容:

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

你可以通过在 ReverseListIterator 构造方法中,传入一个原始的 List,然后获得 ReverseListIterator 的迭代器实例。

ReverseListIterator reverseListIterator = new ReverseListIterator(list);

在获得这个迭代器实例后,就可以使用正常的迭代方法对元素进行遍历和输出了:

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

使用 Guava’s 的 Lists.reverse()

你还可以简单的使用 Google 提供的 Guava 库中的静态 reverse() 方法,这个方法将会返回一个输入 List 的逆向视图。

使用最新的 Guava 依赖:

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

然后对原始的 List 进行逆向视图,使用下面的方法将会返回一个逆向的 List 视图。

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

返回后的逆向视图,将可以使用迭代器进行迭代后遍历:

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

 

Reverse-list-01

 

这个方法将会返回一个新逆向后的 List,原始 List 的顺序是不会改变的。

结论

在本篇文章中,我们对如何将一个 List 进行逆向进行了一些说明和演示。

将一个原始 List 逆向输出的方法比较简单,通常使用上面 3 个思路就可以完成逆向元素的输出了。

 

https://www.ossez.com/t/java-list/13943

Tags: None
Last updated:2022年05月02日

HoneyMoose

有温度的人文和独立的思考

Like
< Previous
Next >

Comments

Cancel reply

Archives
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,362)
    • Confluence (663)
    • Gradle (12)
  • U.S. (482)
  • 文化旅游 (145)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1