创建列表列表

时间:2017-03-08 17:45:54

标签: java list arraylist

我想在Java中创建一个列表列表,这是我正在使用的代码。

public ArrayList<ArrayList<Object>> getRows(){
    ArrayList<ArrayList<Object>> listOfRows = new ArrayList<ArrayList<Object>>();
    ArrayList<Object> temporalRow = new ArrayList<Object>();
    IntNode rowSentinel = newTable.sentinel;
    for (int y = 0; y < this.numberOfRows; y++) {
        for (int x = 0; x < this.numberOfColumns; x++) {
            rowSentinel =rowSentinel.next;
            Object rowElement = rowSentinel.arrayCol.get(y);
            temporalRow.add(rowElement);
        }
        rowSentinel = newTable.sentinel;
        listOfRows.add(temporalRow);
        System.out.print(temporalRow);
        System.out.println(Arrays.toString(listOfRows.toArray()));
        temporalRow.clear();
    }
    return listOfRows;
}

但是,当我看到列表的最终列表时,控制台会给我以下输出:

[oddy1, minino1, libertad1][[oddy1, minino1, libertad1]]

[oddy2, minino2, libertad2][[oddy2, minino2, libertad2], [oddy2, minino2, libertad2]] 

[oddy3, minino3, libertad3][[oddy3, minino3, libertad3], [oddy3, minino3, libertad3], [oddy3, minino3, libertad3]] 

[[], [], []]

我还尝试将listOfRows定义为ObjectsObject[]的数组,其大小为行数,并通过Object[0],{{1}添加元素等等,但我最终得到了相同的结果。

我想获得表单的最终列表

Object[1]

我真的不知道我对代码做错了什么。有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

temporalRow.clear()替换为temporalRow = new ArrayList<Object>(),应该修复它。目前,您的listOfRows包含对同一对象的引用的三倍,之前添加的元素始终会被temporalRow.clear()删除。

答案 1 :(得分:0)

查看以下代码

ArrayList<Test> temporalRow = new ArrayList<Test>();

    Test t = new Test();
    t.i = 5;
    temporalRow.add(t);
    System.out.println(temporalRow.get(0).i);
    t.i = 6;
    System.out.println(temporalRow.get(0).i);

    class Test {
public int i;
}

上述代码的输出为5且 6 ,因为temporalRow列表包含对象t的引用,如果该对象在其他地方被修改,则显然会发生变化,反映在temporalRow。你的情况类似。 (提示:temporalRow.clear();) 我想也许你想熟悉深拷贝与浅拷贝的概念。