2015-02-23 65 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)

相关问题