在2d ArrayList中反转外部ArrayList

时间:2013-06-30 01:15:09

标签: 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;
 }

2 个答案:

答案 0 :(得分:4)

非常简单地说,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);
}

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

答案 1 :(得分:0)

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