我得到了ArrayList:
ArrayList logs;
for(Logs log : getLogs()){
logs.add(log.getName();
}
如何以相反的顺序获取此列表?
答案 0 :(得分: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);
如果您想要一个新列表,请创建一个新列表,使用addAll
将所有元素添加到该列表中,最后反转该列表。
答案 1 :(得分: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()
;
答案 2 :(得分:3)
尝试使用add(int index, E element)
。
ArrayList logs;
for(Logs log : getLogs()){
logs.add(0,log.getName());
}
这将始终将元素作为第一个元素插入,而不是将其附加到列表的末尾,以便反转列表。
答案 3 :(得分:2)
从Java 5开始(至少可能更早),在Collections库中支持这一点。
Collections.reverse(logs);
答案 4 :(得分:0)
反转集合不是必需的,可能是性能灾难(取决于大小)。最自然的JDK方式是涉及listIterator
:
for (ListIterator<String> it = list.listIterator(list.size()); it.hasPrevious();) {
...
}
答案 5 :(得分: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);
}
}
}