在Java中以相反的顺序迭代列表
List 接口提供了一种存储有序集合的方法。它是 Collection 的子接口。它是一个有序的对象集合,可以在其中存储重复的值。由于 List 保留了插入顺序,因此它允许元素的位置访问和插入。
例子
Input: ["geeks", "for", "Geeks"]
Output: ["Geeks", "for", "geeks"]
Input: [ 1, 2, 3, 4, 5]
output: [5, 4, 3, 2, 1]
我们可以通过两种方式以相反的顺序迭代列表:
- 使用 List.listIterator() 和使用 for循环 方法。
- 使用 IntStream range(int startInclusive, int endExclusive)。
方法一:使用List.listIterator() 和使用for 循环方法。
句法:
public ListIterator listIterator()
返回值:此方法返回此列表中元素的列表迭代器(以适当的顺序)。
- 这允许双向访问。
- List.listIterator() 方法用于从列表中的指定位置开始对列表中的元素获取 ListIterator。如果我们需要从最后一个元素开始,起始索引将等于列表的大小。
句法:
ListIterator listIterator( Index )
Index = Index from where list element will reverse till index = 0.
Java
// Java program to iterate List in Reverse Order
import java.util.*;
class GFG {
public static void main(String[] args)
{
// For ArrayList
List list = new ArrayList();
// Add elements to list
list.add("GEEKS");
list.add("for");
list.add("geeks");
// Generate an iterator to iterate List in reverse
// order
ListIterator gfg_itr
= list.listIterator(list.size());
// hasPrevious() returns true if the list has
// previous element
while (gfg_itr.hasPrevious())
{
// Iterate in reverse
System.out.println(gfg_itr.previous());
}
// print list in Reverse using for loop
for (int i = list.size() - 1; i >= 0; i--)
{
// access elements by their index (position)
System.out.println(list.get(i));
}
}
}
Java
// Java Program to iterate List in reverse order
import java.util.*;
import java.util.stream.IntStream;
class GFG {
public static void main(String[] args)
{
// For ArrayList
List list_li = new ArrayList();
// Add elements to list
list_li.add(1);
list_li.add(2);
list_li.add(3);
list_li.add(4);
list_li.add(5);
// Creating an IntStream
IntStream stream = IntStream.range(0, list_li.size());
// Displaying the elements in range
// including the lower bound but
// excluding the upper bound
stream.map(i -> list_li.size() - i - 1).map(list_li::get)
.forEach(System.out::println);
}
}
输出
geeks
for
GEEKS
geeks
for
GEEKS
方法二:使用IntStream range(int startInclusive, int endExclusive)
- 这将按增量步长 1 返回从 startInclusive(包含)到 endExclusive(不包含)的顺序有序 IntStream。它正确处理溢出。
句法 :
static IntStream range(int startInclusive, int endExclusive)
参数 :
- IntStream :原始 int 值元素的序列。
- startInclusive :包含的初始值。
- endExclusive :独占上限。
Java
// Java Program to iterate List in reverse order
import java.util.*;
import java.util.stream.IntStream;
class GFG {
public static void main(String[] args)
{
// For ArrayList
List list_li = new ArrayList();
// Add elements to list
list_li.add(1);
list_li.add(2);
list_li.add(3);
list_li.add(4);
list_li.add(5);
// Creating an IntStream
IntStream stream = IntStream.range(0, list_li.size());
// Displaying the elements in range
// including the lower bound but
// excluding the upper bound
stream.map(i -> list_li.size() - i - 1).map(list_li::get)
.forEach(System.out::println);
}
}
输出
5
4
3
2
1
注意: IntStream range(int startInclusive, int endExclusive) 基本上像 for 循环一样工作。可以按顺序生成等效的递增值序列,如下所示:
for (int i = startInclusive; i < endExclusive ; i++)
{
...
...
...
}