2014-10-02 50 views
2

的长度排序2D ArrayList中我有一个二维数组:由子的ArrayList

ArrayList<List<Integer>> main= new ArrayList<>();  
ArrayList<Integer> sub=new ArrayList<>(); 
sub.add(1); 
sub.add(2); 
main.add(sub); 
............. 

现在主阵列看起来像

main-> [[1,2],[3],[4,5,6],[6,6,8,4]] 

现在我想子的长度来排序数组阵列。我如何得到以下结果?或者是否有一种方法可以在不经过循环的情况下获得子阵列的最大元素长度[在本例中为4]?我可以得到4没有循环?我需要排序,但如果这是不可能的,我想获得子阵列的最大长度maxlength=4;

[[6,6,8,4],[4,5,6],[1,2],[3]] 
+0

'子'数组是什么用? – Devavrata 2014-10-02 05:06:55

+0

@Devavrata子数组从算法中添加到主数组中 – 2014-10-02 05:10:07

回答

3

这里是由子列表的长度排序的一种方法:

您可以创建一个Comparator两个ArrayList<Integer>来比较它们的长度和使用它作为比较参数Collections.sort()

class LengthComparator implements Comparator<ArrayList<Integer>> { 
    public int compare(ArrayList<Integer> list1, ArrayList<Integer> list2) { 
     return list2.size() - list1.size(); // sort descending in length 
    } 
} 

// ... 

ArrayList<ArrayList<Integer>> mainList; 

// ... initialization, adding data 

// sort 
Collections.sort(mainList, new LengthComparator()); 

至于没有循环得到最大值...不是真的。我的意思是你可以通过循环以外的其他方式遍历一个结构(例如递归),但最后你必须检查每个元素...

想一想,如何知道是否有最大值如果您不将其与组中的其他所有内容进行比较,那么它们的价值是多少?