我想在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
定义为Objects
,Object[]
的数组,其大小为行数,并通过Object[0]
,{{1}添加元素等等,但我最终得到了相同的结果。
我想获得表单的最终列表
Object[1]
我真的不知道我对代码做错了什么。有人可以帮我这个吗?
答案 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();
)
我想也许你想熟悉深拷贝与浅拷贝的概念。