List的列表但是输出不正确

时间:2016-02-27 19:32:35

标签: java collections

我一直在尝试将整数列表插入到另一个列表中但似乎我犯了一些错误我的输出不正确可以有人请帮忙吗? 您还可以发表评论http://goo.gl/xdLP9H

public class ListInsideList {
 public static void main(String[] args) {
    List<List<Integer>> newList = new ArrayList<List<Integer>>();
    List<Integer> tempList = new ArrayList<Integer>();
    List<Integer> originalList = new ArrayList<Integer>(); 
    for (int i = 1; i <= 10; i++) {
        originalList.add(i);//adding values to list
    }
    for(Integer value : originalList){
       tempList.add(value);
       if(tempList.size()==5)
       {
            newList.add(tempList);
            System.out.println("iteration:"+newList);
            tempList.clear();//clearing list
       }
    }
    System.out.println("final:"+newList);

  }
}

输出:

iteration:[[6, 7, 8, 9, 10], [6, 7, 8, 9, 10]]
final :[[], []]
required is:iteration:[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
final:[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]

4 个答案:

答案 0 :(得分:4)

您的最终答案需要有2个单独的列表。

  • [1, 2, 3, 4, 5] // List One
  • [6, 7, 8, 9, 10] // List Two

那么你在哪里创建这两个单独的列表?你没有,你只是在每次迭代时重复使用相同的tempList。将tempList添加到另一个List不会将其与变量名称“ tempList ”分开,后者是对clear()的同一对象的引用。

而不是clear(),每次都创建一个新的:

  • 而不是tempList.clear(); //clearing list
  • 使用tempList = new ArrayList<>(); // new List

答案 1 :(得分:1)

您可以将newList.add(tempList);替换为:

1

注意:为了使其工作,你的tempList必须是一个ArrayList(对于List isn&f; t serializable);

newList.add(SerializationUtils.clone(tempList));
templist.clear();

2

List<Integer> list = new ArrayList<>(newList.size());
list.addAll(newList);
newList.add(list);
newList.clear();

答案 2 :(得分:1)

您的列表在最终打印声明中为空。没有任何内容可供打印,因为两个列表都是空的,如图所示,

        System.out.println("final:"+newList.get(0).isEmpty());

    System.out.println("final:"+newList.get(1).isEmpty());

所以请尝试,

 ArrayList<ArrayList<Integer>> newList = new ArrayList<ArrayList<Integer>>();
    ArrayList<Integer> tempList = new ArrayList<Integer>();
    ArrayList<Integer> originalList = new ArrayList<Integer>(); 
    ArrayList<ArrayList<Integer>> finalList = new ArrayList<ArrayList<Integer>>();

    for (int i = 1; i <= 10; i++) {
        originalList.add(i);//adding values to list
    }

    for(Integer value : originalList){
       tempList.add(value);
       if(tempList.size()==5)
       {
            newList.add(tempList);              
            System.out.println("iteration:"+newList);
            finalList = newList;
       }

    }
    System.out.println("final:"+finalList);

答案 3 :(得分:0)

你可以做这样的事情来减少工作量:

变化

newList.add(tempList)

newList.add(newArrayList<Integer>(tempList));

为了复制tempList而不使用它的参考

for(Integer value : originalList){
       tempList.add(value);
       if(tempList.size()==5)
       {
            newList.add(new ArrayList<Integer>(tempList));
            System.out.println("iteration:"+newList);
            tempList.clear();//clearing list
       }
    }
    System.out.println("final:"+newList);