2014-03-19 159 views
-1

我目前面臨着這樣的問題:我有一個包含含多頭幾個LinkedLists一個LinkedList,所以:LinkedLists Java的排序LinkedList的成大小順序

LinkedList<LinkedList<Long>>() overalllList = new LinkedList<LinkedList<Long>(); 

一些代碼運行後,整體的名單得到填補與不同大小的多頭列表。我需要做的是整體列表,以便它包含從最小到最大的多個列表。

我希望這是有道理的。

所以要澄清一下,我需要這樣的:

OverallList: 
    LinkedList<Long> (size 2) - first 
    LinkedList<Long> (size 245) - second 
    LinkedList<Long> (size 1000) - third 
    ...etc 

我不知道,如果使用集合會做到這一點,或者如果我需要看的自定義比較。任何意見或建議,將不勝感激。

感謝

+8

是的,你需要自定義的'Comparator'。 –

+0

您將需要考慮您的列表將具有可變元素。所以它可能不會一次訂購。 –

+0

謝謝你讓我知道,我現在就去看看。 – Tony

回答

3

這裏是這樣做的方法的一個例子,

// A "size()" comparator 
private static Comparator<LinkedList<Long>> comp = new Comparator<LinkedList<Long>>() { 
    @Override 
    public int compare(LinkedList<Long> o1, LinkedList<Long> o2) { 
     return new Integer((o1 == null) ? 0 : o1.size()).compareTo((o2 == null) ? 0 : o2.size()); 
    } 
}; 
public static void main(String[] args) { 
    // LinkedList<LinkedList<Long>>() overalllList = new LinkedList<LinkedList<Long>(); 
    // Note there is an extra() to the left of your overalllList. 
    LinkedList<LinkedList<Long>> overalllList = new LinkedList<LinkedList<Long>>(); 
    LinkedList<Long> list3 = new LinkedList<Long>(); 
    LinkedList<Long> list2 = new LinkedList<Long>(); 
    LinkedList<Long> list1 = new LinkedList<Long>(); 

    for (long i = 0; i < 5; i++) { // 5, or 1000 
     if (i < 2) { 
      list1.add(i); 
     } 
     if (i < 3) { // 3, or 245. 
      list2.add(i); 
     } 
     list3.add(i); 
    } 
    overalllList.add(list3); 
    overalllList.add(list2); 
    overalllList.add(list1); 
    System.out.println("Before: " + overalllList); 

    Collections.sort(overalllList, comp); 
    System.out.println("After: " + overalllList); 
} 

輸出是

Before: [[0, 1, 2, 3, 4], [0, 1, 2], [0, 1]] 
After: [[0, 1], [0, 1, 2], [0, 1, 2, 3, 4]] 
+0

謝謝艾略特,我會試試看! – Tony

2
List<List<Long>> overalllList = new LinkedList<List<Long>>(); 
overalllList.add(Arrays.asList(1L, 2L, 3L)); 
overalllList.add(Arrays.asList(4L, 5L, 6L, 7L, 8L)); 
overalllList.add(Arrays.asList(9L)); 

Collections.sort(overalllList, new Comparator<List<Long>>() { 
    @Override 
    public int compare(List<Long> list1, List<Long> list2) { 
     return list1.size() - list2.size(); 
    } 
});