Добавить список в 2D arraylist - PullRequest
0 голосов
/ 04 мая 2011

Я застрял со следующей проблемой. Не обращая внимания на большинство кода, моя проблема заключается в следующем: у меня есть разные списки 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 ]

1 голос
/ 04 мая 2011

Ваше добавление x к conVert будет следовать за любыми изменениями к x, поскольку оно просто помещает ссылку в список.Вместо этого вы можете скопировать его следующим образом:

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

В качестве альтернативы вы можете просто переместить конструкцию x в свой первый цикл for и пропустить очистку.

0 голосов
/ 04 мая 2011

Если я вас правильно понимаю, вы видите, что содержимое conVert очищается так же, как и x.Это связано с тем, что list.add не является глубокой копией, а только помещает ссылку на оригинал.Что вы могли бы сделать, это клон х и добавить это -

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

Это должно работать.

...