将列表添加到2D arraylist

时间:2011-05-04 09:04:01

标签: java arraylist 2d

我坚持以下问题。忽略最多的代码,我的问题是:我每次迭代都有一个不同的列表x,我想在2DarrayList conVert中解析它,所以我使用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);
        }

2 个答案:

答案 0 :(得分:1)

您向x添加conVert将会对x进行任何更改,因为它只是在列表中添加了引用。你可以这样复制它:

conVert.add(new ArrayList<Integer>(x));

或者你可以在第一个for循环中移动x的构造并跳过清除。

答案 1 :(得分:0)

如果我理解正确,你会看到conVert的内容和x一样被清除。这是因为list.add不是深层副本,它只将引用放在原始文件中。你可以做的是克隆x并添加 -

List<Integer> tempX = new List<Integer>();
tempX.addAll(x);
conVert.add(tempX);
x.clear();

这应该有效。