2013-11-26 40 views
1

我的源LinkedList有20300個項目。我需要分別將這個列表分爲每2500個項目的子列表,剩下的值(在這種情況下爲300)應該出現在最後的List中。根據列表中的項目數,將LinkedList分成多個列表

請讓我知道我該如何做到這一點?

下面的代碼工作正常,除了最後300個值,它拋出的錯誤..

private static List<List<String>> split(LinkedList<String> src, int maxSize){ 
    List<List<String>> splittedList = new ArrayList<List<String>>(); 
    int itemsRemaining = src.size(); 
    int start = 0; 

    while (itemsRemaining != 0) { 
     int end = itemsRemaining >= maxSize ? (start + maxSize) : itemsRemaining; 

     splittedList.add(src.subList(start, end)); 

     int sizeOfFinalList = end - start; 
     itemsRemaining = itemsRemaining - sizeOfFinalList; 
     start = start + sizeOfFinalList; 
    } 

    return splittedList; 

} 
+7

你試過了什麼? – Shamse

+0

你會得到什麼錯誤?在發生錯誤時,開始和結束的價值是多少? – Freiheit

+0

@Freiheit收到的錯誤是線程「main」中的異常java.lang.IllegalArgumentException:fromIndex(6)> toIndex(2) \t at java.util.SubList。 (Unknown Source) \t at java.util.AbstractList.subList(Unknown Source) – Mahiz

回答

0

你在計算結束時犯了一個錯誤。而不是

int end = itemsRemaining >= maxSize ? (start + maxSize) : itemsRemaining; 

應該

int end = start + (itemsRemaining >= maxSize ? maxSize : itemsRemaining); 

或者說

int end = start + Math.min(maxSize ,itemsRemaining); 

請注意,在您的版本最後的元素結束設置爲剩餘項目的數量,而不是原始列表的大小。

0

創建遞歸與原來的名單,一個計數器和一個空列表調用自身的函數(累加器)。在該功能中,執行以下操作:

測試原始列表是否爲空,如果是,則返回累加器。否則,測試計數器是否等於300(或其他),如果是,則將原始列表中的下一個元素添加到累加器,將原始列表中當前元素的「next」設置爲null,並調用函數與相同的下一個元素零和累加器返回結果。否則,請使用列表中的下一個元素,遞增計數器和累加器調用函數,並返回結果。

使用原始列表,零和空列表調用函數。它應該返回結果。

由於這顯然是一個家庭作業問題,我希望這可以幫助你,而無需爲你做作業。由於我沒有寫出來,因此可能存在逐個錯誤或向累加器添加空列表的問題,但一般算法應該可行,您只需要將其解決。祝你好運。

相關問題