Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList将当前项添加到上一项;删除当前项目_Java_Arraylist_Merge_Split Apply Combine - Fatal编程技术网

Java ArrayList将当前项添加到上一项;删除当前项目

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){

代码的目的是迭代ArrayList>ListofList中的每个项目,并将以前的列表合并到当前列表中,对当前列表进行排序并删除下一个列表(因为已经合并)。这需要发生,直到只剩下一个列表。有了它,我可以将ArrayList.get(0)的内容吐出到一个文件中

ListofList是在代码段之前定义的。 我正在努力解决的是:如何将alStr1内容发送回ListofList.get(0)

这将解释我试图实现的目标。请原谅我没有先加上这个

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 + ", ");
            }
        }