1

我得到数组列表:

ArrayList logs;
for(Logs log : getLogs()){           
    logs.add(log.getName();        
}

如何以相反的顺序获取此列表?

4

6 回答 6

5

使用类的reverse方法Collections来反转列表。请注意,这将影响列表本身。

ArrayList logs = new ArrayList(); //Initialize this list or your
                                  //code won't compile.

for(Logs log : getLogs()){           
    logs.add(log.getName();        
}

Collections.reverse(logs);

如果您想要一个新列表,请创建一个新列表,使用 using 将所有元素添加到其中addAll,最后反转该列表。

于 2013-02-20T19:11:02.680 回答
4

尝试使用add(int index, E element).

ArrayList logs;
for(Logs log : getLogs()){           
    logs.add(0,log.getName());        
}

这将始终将元素作为第一个元素插入,而不是将其附加到列表的末尾,因此您的列表会反转。

于 2013-02-20T19:12:55.270 回答
4
for ( int i = logs.size() - 1; i >= 0; --i )
    // do something with logs.get( i )
    ;

不要浪费时间来反转可以以相反顺序迭代的东西。

更新: listIterator 也可以以相反的顺序使用,并且是更通用的解决方案:

for ( ListIterator< Logs > lit = logs.listIterator( logs.size() ); lit.hasPrevious(); )
    // do something with lit.previous()
    ;
于 2013-02-20T19:15:39.737 回答
2

从 Java 5 开始(至少,可能更早),Collections 库中对此提供了支持。

 Collections.reverse(logs);
于 2013-02-20T19:12:50.717 回答
0

反转集合不是必需的,并且可能会导致性能灾难(取决于大小)。最自然的 JDK 方式是涉及listIterator

for (ListIterator<String> it = list.listIterator(list.size()); it.hasPrevious();) {
  ...
}
于 2013-02-20T19:19:45.797 回答
0
/** ArrayList Elements Reverse Without Using Collections Reverse */
public static void main(String s[]) {

        ArrayList<Integer> alOrig = new ArrayList<Integer>();
        alOrig.add(210);
        alOrig.add(213);
        alOrig.add(214);
        alOrig.add(216);
        alOrig.add(217);

        System.out.println("ArrayList Elements in Normal Order");
        Iterator alOrigItr = alOrig.iterator();

        while (alOrigItr.hasNext()) {
            System.out.println("" + alOrigItr.next());
        }

        System.out.println("ArrayList Elements in Reverse Order ");

        ArrayList<Integer> alRev = new ArrayList<Integer>();

        for (int i = alOrig.size(); i > 0; i--) {
            alRev.add(alOrig.size() - i, alOrig.get(i - 1));
        }

        for (Integer alRevI : alRev) {

            System.out.println("" + alRevI);
        }

    }

}
于 2014-06-28T05:40:24.770 回答