2013-02-20 92 views
1

相反的顺序,我得到的ArrayList:添加的元素在Java中

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

我怎样才能得到这个单子?

+1

参见[番石榴(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

+1

使用'LinkedList'并调用'addFirst' ..如果你想使用'ArrayList',那么你可以调用'insert(element,0)' – Shivam 2013-02-20 19:10:10

+0

我试过了通过计数物体。但我认为,这是一种更简单的方法 – Jffs2ej 2013-02-20 19:10:40

回答

5

使用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,最后逆转的那一个。

+0

'LinkedList'?真? – 2013-02-20 19:19:50

+0

@ruakh鹰眼,谢谢。 – Gamb 2013-02-20 19:23:41

+0

@ruakh真的,我真的理解了代码。现在完成了。 – Gamb 2013-02-20 19:31:10

2

从Java 5开始(至少可能会更早),在Collections库中支持这个功能。

Collections.reverse(logs); 
2

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

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

这将始终插入元素作为第一要素,而不是追加到列表中,这样你的列表是相反的结束。

4
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() 
    ; 
+0

这是一个很好的观点。您可能想根据天气情况做出明智的决定,或根据您打算如何使用该列表进行排序。如果你只是想反向阅读一次..你应该这样做。 – gbtimmon 2013-02-20 19:17:32

+0

+1在盒子外面思考。艰难的OP问及以相反的顺序获取列表,而不是元素,这一个仍然是一个有效的选择。我也同意@gbtimmon对于一个简单的“向后读”情况,这是一条路。 – Gamb 2013-02-20 19:17:51

+2

如果接口是'List'而不是'ArrayList',那么使用get(i)'可能会造成比'reverse'更大的性能灾难。我们有'listIterator'。 – 2013-02-20 19:21:43

0
倒车

集合是不必要的,并且是一个潜在的性能灾难(取决于尺寸)。最自然的JDK的方法是涉及listIterator

for (ListIterator<String> it = list.listIterator(list.size()); it.hasPrevious();) { 
    ... 
} 
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); 
     } 

    } 

}