代碼的用途是遍歷ArrayList> listOfLists中的每個項目,並將前一個列表合併到當前列表中,對當前列表進行排序並刪除下一個列表(自從已經合併)。這需要發生,直到只剩下一個列表。藉此,我可以將ArrayList.get(0)的內容吐出到文件中。Java ArrayList將當前項添加到上一項;刪除當前項目
listOfLists在代碼段之前定義。 我在苦苦掙扎的是:alStr1內容如何被髮送回listOfLists.get(0)?
while (listOfLists.size() > 1) {
System.out.println(">>>>>>>>>>>>>Iteration"+i);
Iterator<ArrayList<String>> itr = listOfLists.iterator();
while(itr.hasNext()) {
ArrayList<String> alStr1 = itr.next();
try{
ArrayList<String> alStr2 = itr.next();
alStr1.addAll(alStr2);
Collections.sort(alStr1);
itr.remove();
}catch (NoSuchElementException e){
e.printStackTrace();
break;
}
}
}
提供任何意見,非常感謝。 謝謝
LOGIC:
------
L1 L2 L3 L4 L5 --> L1+L2 L3+L4 L5
L1+L2 L3+L4 L5 --> L1+L3 L5
L1+L3 L5 --> L1+L5
L1+L5 --> L1
L1 => going to a file.
listOfLists will include these 5 lists:
L1: [100,101,102]
L2: [200,201,202]
L3: [300,301,302]
L4: [400,401,402]
L5: [500,501,502]
Iteration 1:
L1 = L1+L2>> [100,101,102,200,201,202]
L3 = L3+L4>> [300,301,302,400,401,402]
L5 = L5 >> [500,501,502]
Iteration 2:
L1 = L1+L3>> [100,101,102,200,201,202,300,301,302,400,401,402]
L5 >> [500,501,502]
Iteration 3:
L1 = L1+L5>> [100,101,102,200,201,202,300,301,302,400,401,402,500,501,502]
這將解釋我正在嘗試實現。請原諒我不先加入。
您不在排序組合列表 - 您正在排序「下一個」列表,然後將其添加到「當前」列表中。但我不確定你爲什麼這樣做。你肯定需要這條有點複雜的路線嗎?難道你不能只遍歷所有的列表,並按照順序將它們添加到第一個列表中? (你最終需要'listOfLists',還是隻需要單個組合列表?)更多的上下文會有所幫助。 –
@JonSkeet:對於上下文,這是排序算法的一部分。我試圖實現半合併排序。在那裏,我想分解多個部分的數據集並分別對每個部分進行排序,然後開始合併並對它們進行排序,直到所有列表被合併和排序。合併排序會將記錄分解到單個元素並開始合併和排序。 – shivster
@JonSkeet:你排列第二個列表而不是組合列表是正確的。它應該是alStr1。編輯代碼以反映這一點。 – shivster