2013-06-30 32 views
-1

在java中,如果使用Collections.reverse(someArrayList)反轉2d ArrayList會發生什麼情況? 只有外部維度被顛倒了嗎?在2d ArrayList中反轉外部ArrayList

這裏是我的代碼:

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

歡迎來到SO。你應該參加[tour](http://stackoverflow.com/about)。你有沒有嘗試自己運行代碼並看到? –

+0

我嘗試過運行它,但無法確定它是否正在執行它應該執行的操作。我不擅長調試代碼。 – Mike

+0

你用作調試器的是什麼?一個IDE或一個獨立的調試器?如果你用可以放置原始位置信息(例如字符串)的東西填充2D數組列表,調試也可能會更簡單 –

回答

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); 
} 

括號是完全沒有必要在這種情況下。

+0

謝謝你,那正是我想要它工作的原因。我試圖從2D陣列創建掃描線而不改變原始值。我找不到任何例子來證實這一點。 – Mike

0

是的,內部元素(ArrayList<Pixel>的實例)不會顛倒。如果你想以遞歸的方式將所有的東西逆轉,你必須自己實現。

+0

你的答案是可以接受的,但我只能選擇一個答案。 – Mike