Java 将列表添加到2D arraylist
我遇到了以下问题。忽略大部分代码,我的问题是:每次迭代我都有一个不同的列表x,我想在2DarrayList转换中解析它,所以我使用conVert.add(x);但是我的问题是关于x.clear();。当我在清除之前打印conVert时,conVert可以,但当我在清除x之后打印它时,conVert也被清除。我能为此做些什么?提前谢谢Java 将列表添加到2D arraylist,java,arraylist,2d,Java,Arraylist,2d,我遇到了以下问题。忽略大部分代码,我的问题是:每次迭代我都有一个不同的列表x,我想在2DarrayList转换中解析它,所以我使用conVert.add(x);但是我的问题是关于x.clear();。当我在清除之前打印conVert时,conVert可以,但当我在清除x之后打印它时,conVert也被清除。我能为此做些什么?提前谢谢 List<Integer> x = new ArrayList<Integer>(); // List&l
List<Integer> x = new ArrayList<Integer>();
// List<Integer> x1 = new ArrayList<Integer>();
List<Integer> valenceList = new ArrayList<Integer>();
List<List<Integer>> conVert = new ArrayList<List<Integer>>();
for (int q = 1; q <= 4; q++) {
for (int i = 0; i < Faces.length; i++) {
for (int j = 0; j < 2; j++) {
if (Faces[i][j] == q) {
x.add(Faces[i][0]);
x.add(Faces[i][1]);
x.add(Faces[i][2]);
}
}
}
removeDuplicateWithOrder((ArrayList) x);
valenceList.add(x.size() -1);
//x1 = x;
conVert.add(x);
System.out.println(conVert);
x.clear();
//System.out.println(conVert);
}
List x=new ArrayList();
//列表x1=新的ArrayList();
List valenceList=新的ArrayList();
List conVert=new ArrayList();
对于(int q=1;q您将x
添加到conVert
将遵循对x
的任何更改,因为它只是将引用放入列表中。您可以这样复制它:
conVert.add(new ArrayList<Integer>(x));
conVert.add(新的ArrayList(x));
或者,您可以将x
的结构移动到第一个for循环中,并跳过清除操作。如果我理解正确,您会看到conVert的内容和x一样被清除。这是因为list.add不是深度副本,它只会将引用放在原始的部分。您可以做的是克隆x加上-
List<Integer> tempX = new List<Integer>();
tempX.addAll(x);
conVert.add(tempX);
x.clear();
List tempX=new List();
tempX.addAll(x);
conVert.add(tempX);
x、 清除();
这应该行。正确。您可以使用conVert.add(x.clone());
保存几个字符,尽管这意味着将x
键入为ArrayList
@Daniel:您也需要强制转换它,即conVert.add((ArrayList)x.clone())
。我认为将x
的结构移动到第一个循环中并删除clear将节省大部分字符:)胡说八道,您只需执行l.getClass().getMethod(“克隆”).invoke(l)代码>:-)谢谢你们,这正是我想要的。