相反的顺序,我得到的ArrayList:添加的元素在Java中
ArrayList logs;
for(Logs log : getLogs()){
logs.add(log.getName();
}
我怎样才能得到这个单子?
相反的顺序,我得到的ArrayList:添加的元素在Java中
ArrayList logs;
for(Logs log : getLogs()){
logs.add(log.getName();
}
我怎样才能得到这个单子?
使用Collections
类的reverse
方法来反转列表。请注意,这将影响列表本身。
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
,最后逆转的那一个。
从Java 5开始(至少可能会更早),在Collections库中支持这个功能。
Collections.reverse(logs);
尝试使用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)
;
不要浪费时间逆转可以以相反顺序迭代的东西。
UPDATE:的ListIterator也可以以相反的顺序使用,并且是一个更通用的解决方案:
for (ListIterator<Logs> lit = logs.listIterator(logs.size()); lit.hasPrevious();)
// do something with lit.previous()
;
这是一个很好的观点。您可能想根据天气情况做出明智的决定,或根据您打算如何使用该列表进行排序。如果你只是想反向阅读一次..你应该这样做。 – gbtimmon 2013-02-20 19:17:32
+1在盒子外面思考。艰难的OP问及以相反的顺序获取列表,而不是元素,这一个仍然是一个有效的选择。我也同意@gbtimmon对于一个简单的“向后读”情况,这是一条路。 – Gamb 2013-02-20 19:17:51
如果接口是'List'而不是'ArrayList',那么使用get(i)'可能会造成比'reverse'更大的性能灾难。我们有'listIterator'。 – 2013-02-20 19:21:43
集合是不必要的,并且是一个潜在的性能灾难(取决于尺寸)。最自然的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);
}
}
}
参见[番石榴(http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect /Lists.html#reverse(java.util.List)) – yohlulz 2013-02-20 19:09:19
使用'LinkedList'并调用'addFirst' ..如果你想使用'ArrayList',那么你可以调用'insert(element,0)' – Shivam 2013-02-20 19:10:10
我试过了通过计数物体。但我认为,这是一种更简单的方法 – Jffs2ej 2013-02-20 19:10:40