如何倒序迭代 ArrayDeque?

15

如何反向迭代 ArrayDeque?

对于数组,我通常会这样做,但它不支持索引。

for (int i = delegate.size() - 1; i >= 0; i--) {}

谢谢

3个回答

28
您可以使用方法descendingIterator()获取以相反顺序迭代ArrayDeque<T>的迭代器。
Iterator<T> it = arrayDeque.descendingIterator();
while(it.hasNext()) {
    // do something with it.next()
}

2
可能需要使用泛型而不是裸类型。 - kervin
1
在 Kotlin 中无法工作。你知道相应的替代方法吗?我找不到它。 - Sarah Multitasker
@SarahMultitasker:对于 kotlin.collections.ArrayDequeasReversed() 应该能解决问题。它不会创建一个新的、反转的列表副本。而是使用装饰器/视图将原始列表包装起来,并将索引指向原始列表中的反转位置。请参阅源代码 - aruh
@SarahMultitasker:对于kotlin.collections.ArrayDequeasReversed()应该能解决问题。它不会创建一个新的、反转的列表副本。原始列表会被包装在一个装饰器/视图中,该视图将索引指向原始列表中的反转位置。请参阅源代码 - undefined
@SarahMultitasker 我觉得你可能在使用 addFirst() 方法向 ArrayDeque 添加元素。为什么不直接使用 addLast() 方法,这样就不需要在循环遍历时进行反转了呢? - undefined

0

-1

试一下这个

元素将会从最后一个到第一个的顺序返回。

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */

class List {
   public static void main(String[] args) {
      // creating a TreeSet 
      TreeSet <Integer>treeadd = new TreeSet<Integer>();

      // adding in the tree set
      treeadd.add(1);
      treeadd.add(13);
      treeadd.add(17);
      treeadd.add(2);

      // create descending iterator
      Iterator iterator;
      iterator = treeadd.descendingIterator();

      // displaying the Tree set data
      System.out.println("Descending order: ");     
      while (iterator.hasNext()){
          System.out.println(iterator.next() + " ");
      }
   }    
} 

那不是一个ArrayDeque。 - user2357112

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接