代码的用途是遍历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