Java 将列表添加到2D arraylist

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

我遇到了以下问题。忽略大部分代码,我的问题是:每次迭代我都有一个不同的列表x,我想在2DarrayList转换中解析它,所以我使用conVert.add(x);但是我的问题是关于x.clear();。当我在清除之前打印conVert时,conVert可以,但当我在清除x之后打印它时,conVert也被清除。我能为此做些什么?提前谢谢

         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):-)谢谢你们,这正是我想要的。