-1

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

这是我的代码:

public ArrayList<ArrayList<Pixel>> getReversedArrayList(ArrayList<ArrayList<Pixel>> original)
 {
 ArrayList<ArrayList<Pixel>> copy = new ArrayList<ArrayList<Pixel>>(original);
 Collections.reverse(copy);
 return copy;
 }
4

2 回答 2

5

很简单地说,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()没有考虑到ArrayListcontains 。ArrayLists它将它们视为普通对象并颠倒它们的顺序而不触及它们的内容。否则,将导致不确定的、难以跟踪的行为和各种猪的飞行。

如果你想翻转所有内部,使用这个快速花絮:

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

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

于 2013-06-30T01:19:01.607 回答
0

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

于 2013-06-30T01:19:09.920 回答