【问题标题】:added elements in ArrayList in the reverse order in java在java中以相反的顺序在ArrayList中添加元素
【发布时间】:2013-02-05 22:24:20
【问题描述】:

我得到了 ArrayList:

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

我怎样才能以相反的顺序得到这个列表?

【问题讨论】:

  • Guava
  • 使用LinkedList并致电addFirst..如果您想使用ArrayList,则可以致电insert(element, 0)
  • @Ovidiu:或the JDK
  • 您不能稍后使用Collections.reverse 反转列表吗?
  • @Jffs2ej:如果你有工作代码,那么你应该发布它。这将使其他人更容易发布改进的代码以保留您的代码行为。

标签: java arraylist


【解决方案1】:

使用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 将所有元素添加到其中,最后,反转该列表。

【讨论】:

  • @ruakh 确实,我实际上理解了代码。现在完成了。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:
    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()
        ;
    

    【讨论】:

    • 这是一个很好的观点。您可能希望根据您打算如何使用列表来对天气做出有意识的决定或不进行排序。如果您只想反向阅读一次..您应该这样做。
    • +1 用于跳出框框思考。艰难的 OP 询问以相反的顺序获取列表,而不是元素,这仍然是一个有效的选项。我也同意@gbtimmon 的观点,对于简单的“向后阅读”情况,这是可行的方法。
    • 如果接口是List 而不是ArrayList,使用get(i) 可能会导致比reverse 更大的性能灾难。我们有listIterator
    • OP 使用了 ArrayList。使用 LinkedList 我会给出 descendingIterator 代码。不过你提出了一个很好的观点。
    【解决方案4】:

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

     Collections.reverse(logs);
    

    【讨论】:

      【解决方案5】:

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

      for (ListIterator<String> it = list.listIterator(list.size()); it.hasPrevious();) {
        ...
      }
      

      【讨论】:

        【解决方案6】:
        /** 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);
                }
        
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-30
          • 2014-04-08
          • 2017-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多