ArrayList中的ArrayList被覆盖

时间:2016-01-25 04:15:56

标签: java arraylist

这是我的代码。 在我的情况下,名单越来越多。 输出应为[[1] [1,1] [1,2,1] [1,3,3,1] [1,4,6,4,1] 我变得像 - [[1,4,6,4,1],[1,4,6,4,1],[1,4,6,4,1],[1,4,6,4] ,1],[1,4,6,4,1]]。这是循环重复的最新值。可能是什么问题

int i,j;
i=0;
j=0;
int a;
Integer temp;
a = 5;
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list1 = new ArrayList<Integer>();

for ( i =0 ;i<a ;i++)
{
    list1.clear();

    Integer number; 
    number = (int) Math.pow(11, i);
    LinkedList<Integer> stack = new LinkedList<Integer>();
    while (number > 0) {
        stack.push( number % 10 );
        number = number / 10;
    }

    while (!stack.isEmpty()) {
        temp = (stack.pop());
        list1.add(temp);    
    }
    list.add(list1);
}
System.out.println("The arraylist contains the following elements: "+ list);

2 个答案:

答案 0 :(得分:0)

您似乎每次都在清理List1数组。并且在大型数组列表中只有一个数组列表。所以你最终得到了你在内部arraylist上的最后结果。为了获得预期的结果,你应该在for循环中创建几个arraylists。

答案 1 :(得分:0)

list1.clear()替换为list1 = new ArrayList<Integer>();

在Java中,它是按值调用的。但是当说list1时,您只有参考list1

所以当你在迭代时,你正在做list1.clear。它的作用是清除引用列表1 列表指向。这将清除您添加到list中的列表。所以最后得到的是list1的最新内容。

有关详细说明,请参阅this