我得到数组列表:
ArrayList logs;
for(Logs log : getLogs()){
logs.add(log.getName();
}
如何以相反的顺序获取此列表?
使用类的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
,最后反转该列表。
尝试使用add(int index, E element)
.
ArrayList logs;
for(Logs log : getLogs()){
logs.add(0,log.getName());
}
这将始终将元素作为第一个元素插入,而不是将其附加到列表的末尾,因此您的列表会反转。
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()
;
从 Java 5 开始(至少,可能更早),Collections 库中对此提供了支持。
Collections.reverse(logs);
反转集合不是必需的,并且可能会导致性能灾难(取决于大小)。最自然的 JDK 方式是涉及listIterator
:
for (ListIterator<String> it = list.listIterator(list.size()); it.hasPrevious();) {
...
}
/** 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);
}
}
}