在2d ArrayList中反转外部ArrayList

  • 本文关键字:ArrayList 外部 2d java
  • 更新时间 :
  • 英文 :


在java中,如果使用Collections.reverse(someArrayList)反转2d ArrayList,会发生什么?只有外部尺寸会反转吗?

这是我的代码:

public ArrayList<ArrayList<Pixel>> getReversedArrayList(ArrayList<ArrayList<Pixel>> original)
 {
 ArrayList<ArrayList<Pixel>> copy = new ArrayList<ArrayList<Pixel>>(original);
 Collections.reverse(copy);
 return copy;
 }
简单地说,reverse()不会通过数组列表传播到一维之外。

假设您创建了一个ArrayList<ArrayList<Integer>>(为了简化起见,不是像素),如下所示(这不是有效的java,只是一个概述):

ArrayList //called outer
    ArrayList //called inner-1
        Integer(11)
        Integer(12)
    ArrayList //called inner-2
        Integer(21)
        Integer(22)

然后Collections.reverse()是外部ArrayList

您将获得:

ArrayList //called outer
    ArrayList //called inner-2
        Integer(21)
        Integer(22)
    ArrayList //called inner-1
        Integer(11)
        Integer(12)

reverse()不考虑ArrayList包含ArrayLists。它将它们视为正常对象,并在不接触其内容的情况下反转它们的顺序。否则,将导致不明确、难以追踪的行为和各种各样的猪飞。

如果你想翻转所有内部,请使用以下快速花絮:

for(ArrayList innerList: copy){ //named as per your existing code in the original post
    Collections.reverse(innerList);
}

在这种情况下,括号并不是绝对必要的。

是的,内部元素(ArrayList<Pixel>的实例)不会反转。如果你想在结构的深处递归地反转所有东西,你必须自己实现。

最新更新