Java ArrayList将当前项添加到上一项;删除当前项目
代码的目的是迭代ArrayList>ListofList中的每个项目,并将以前的列表合并到当前列表中,对当前列表进行排序并删除下一个列表(因为已经合并)。这需要发生,直到只剩下一个列表。有了它,我可以将ArrayList.get(0)的内容吐出到一个文件中 ListofList是在代码段之前定义的。 我正在努力解决的是:如何将alStr1内容发送回ListofList.get(0) 这将解释我试图实现的目标。请原谅我没有先加上这个Java ArrayList将当前项添加到上一项;删除当前项目,java,arraylist,merge,split-apply-combine,Java,Arraylist,Merge,Split Apply Combine,代码的目的是迭代ArrayList>ListofList中的每个项目,并将以前的列表合并到当前列表中,对当前列表进行排序并删除下一个列表(因为已经合并)。这需要发生,直到只剩下一个列表。有了它,我可以将ArrayList.get(0)的内容吐出到一个文件中 ListofList是在代码段之前定义的。 我正在努力解决的是:如何将alStr1内容发送回ListofList.get(0) 这将解释我试图实现的目标。请原谅我没有先加上这个 publicstaticvoidmain(字符串[]args){
publicstaticvoidmain(字符串[]args){
public static void main(String[] args) {
List<List<Integer>> listOfList = new ArrayList<List<Integer>>();
Random rand = new Random(System.currentTimeMillis());
for (int i = 0; i < 5; i++) {
List<Integer> list = new ArrayList<Integer>();
for (int j = 0; j < 5; j++) {
list.add(rand.nextInt(1000));
}
listOfList.add(list);
}
while (listOfList.size() > 1) {
Iterator<List<Integer>> itr = listOfList.iterator();
List<Integer> first = itr.next();
while (itr.hasNext()) {
List<Integer> temp = itr.next();
first.addAll(temp);
itr.remove();
Collections.sort(first);
}
}
List<Integer> first = listOfList.get(0);
for (Integer integer : first) {
System.out.print(integer + ", ");
}
}
List listOfList=新建ArrayList();
Random rand=新的Random(System.currentTimeMillis());
对于(int i=0;i<5;i++){
列表=新的ArrayList();
对于(int j=0;j<5;j++){
增加(兰特·耐克斯汀(1000));
}
添加(列表);
}
while(listOfList.size()>1){
迭代器itr=listOfList.Iterator();
List first=itr.next();
while(itr.hasNext()){
List temp=itr.next();
第一,addAll(temp);
itr.remove();
集合。排序(第一);
}
}
List first=listOfList.get(0);
for(整数:第一个){
系统输出打印(整数+“,”);
}
}
您没有对组合列表进行排序-您正在对“下一个”列表进行排序,然后将其添加到“当前”列表中。但我不知道你为什么这么做。你真的需要这条有点复杂的路线吗?难道你不能迭代所有的列表,然后排序并将它们添加到第一个列表中吗?(您到底需要listOfLists
还是只需要一个组合列表?)更多的上下文会有所帮助。@JonSkeet:对于上下文,这是排序算法的一部分。我正在尝试实现半合并排序。在这种情况下,我想将数据集分解为多个部分,分别对每个部分进行排序,然后开始合并它们并对它们进行排序,一次又一次,直到所有列表都合并并排序。“合并排序”会将记录分解为一个元素,然后从该元素开始合并和排序。@JonSkeet:关于排序第二个列表而不是组合列表,您是对的。也应该是这样。编辑代码以反映这一点。这将继续向第一个列表添加列表。需要做的是,前两个列表合并,下两个将合并。。一直到最后一个列表。然后外部while将启动并重复该过程,直到合并所有列表。L1 L3 L4 L5-->L1+L2 L3+L4 L5-->L1+L3 L5-->L1+L5-->L1+L5-->L1接受此作为解决方案,只需在while循环中移动第一个列表即可。谢谢你帮我做这件事。while(itr.hasNext()){first=itr.next();if(itr.hasNext()){temp=itr.next();first.addAll(temp);itr.remove();}
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]
public static void main(String[] args) {
List<List<Integer>> listOfList = new ArrayList<List<Integer>>();
Random rand = new Random(System.currentTimeMillis());
for (int i = 0; i < 5; i++) {
List<Integer> list = new ArrayList<Integer>();
for (int j = 0; j < 5; j++) {
list.add(rand.nextInt(1000));
}
listOfList.add(list);
}
while (listOfList.size() > 1) {
Iterator<List<Integer>> itr = listOfList.iterator();
List<Integer> first = itr.next();
while (itr.hasNext()) {
List<Integer> temp = itr.next();
first.addAll(temp);
itr.remove();
Collections.sort(first);
}
}
List<Integer> first = listOfList.get(0);
for (Integer integer : first) {
System.out.print(integer + ", ");
}
}