2015-02-23 107 views
0

在這裏,我創建了一個新的二維ArrayList並對其進行排序。每次我是否需要在循環中新建一個ArrayList?

//1. sort list, based on col 0. 
//list : List<List<Integer>> 
List<ArrayList<Integer>> sortedList = new ArrayList<ArrayList<Integer>>(); 
for(int i = 0; i < list.size(); i++){ 
    sortedList.add(new ArrayList<Integer>(list.get(i))); //===> question for this line! 
} 

Collections.sort(sortedList, new Comparator<ArrayList<Integer>>() {  
     @Override 
     public int compare(ArrayList<Integer> o1, ArrayList<Integer> o2) { 
      return o1.get(0).compareTo(o2.get(0)); 
     }    
}); 

我有一個問題,我的問題。 (見箭頭以上), 我需要「新的」它就像我一樣, 或者我可以叫

sortedList.add(list.get(i)); 
+1

這取決於 - 你想要一個新的實例或同一個對象在多個地方被引用嗎? – amit 2015-02-23 21:16:09

+0

我想我不想參考。我想要一個獨立的數據列表。 – BufBills 2015-02-23 21:17:55

+0

所以你應該使用新的 – amit 2015-02-23 21:18:07

回答

1

的區別你的兩種方法之間是在引用是如何的方式。一般來說,兩者都應該有效

在第一種方法中,您創建了2D列表的副本,這意味着對舊列表的更改不會影響您的排序列表。 第一種方式更安全。

在第二種方法中,您創建了2D列表的淺表副本,這意味着如果要更改已排序列表的子列表,這些更改將影響原始列表以及其他方式。 第二種方式是提高內存的效率和速度。

0

根據你的程序上面,你聲明排序列表作爲的ArrayList的列表: 名單>排序列表=新的ArrayList>()

排序列表將期待整數類型的新的ArrayList或類型整數ArrayList的一個參考

如果您希望您的sortedList爲每次迭代包含一個新的整數列表,請執行以下操作;

for(int I=0 I<Iist.size I++){ 
    List<Integer> ints = new ArrayList<Integer>(); 
    ints.add(list(I)); 
    sortedList.add(ints); 

}

如果你希望你的排序列表包含整數的ArrayList僅供參考,請執行以下操作: Asssuming你遍歷列表對象的類型是ArrayList,你可以做sortedList.add (list)

相關問題