2014-10-02 53 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()); 

至於沒有循環得到最大值...不是真的。我的意思是你可以通過循環以外的其他方式遍歷一個結構(例如遞歸),但最後你必須檢查每個元素...

想一想,如何知道是否有最大值如果您不將其與組中的其他所有內容進行比較,那麼它們的價值是多少?