Зацикленные элементы ArrayList элементов ArrayLists заменяется на последнее зацикленное значение

Я не могу понять, почему каждый элемент в «ALofcompoundedPrimeAL», который является ArrayList из ArrayList, заканчивается тем, что все элементы одинаковы. Таким образом, хотя ArrayList "theNewPrimeFactorsAL" выглядит правильным, каждая итерация цикла for изменяет все элементы ALofcompoundedPrimeAL на элементы последней итерации; то есть ALofcompoundedPrimeAL не индексирует уникальные элементы, вместо этого каждый элемент изменяется на значение последней итерации цикла. Кроме того, буду ли я использовать правильные инструменты для хранения наборов наборов? Важно, что я могу подсчитать количество простых множителей от итерации к итерации, поэтому я не могу просто создать новый набор с возможными новыми простыми делителями.

Я нашел это: link который, по-видимому, работает, но не может заставить цикл не обновлять каждый элемент в ALofcompoundedPrimeAL, чтобы он был значением последней итерации.

public ArrayList<ArrayList<Integer>> CompoundDivisors(
        ArrayList<Set<Integer>> SetofallPrimeFactorsAL) {

    Set<Integer> PrimeFactorsSET;
    ArrayList<Integer> theNewPrimeFactorsAL = new ArrayList<Integer>();
    ArrayList<ArrayList<Integer>> ALofcompoundedPrimeAL = new ArrayList<ArrayList<Integer>>();

    ArrayList<Integer> thePrimeFactorsAL;
    for (int k = 0; k < SetofallPrimeFactorsAL.size(); k++) {
        PrimeFactorsSET = SetofallPrimeFactorsAL.get(k);
        // PrimeFactorsAL takes the set of Prime Factors (in
        // PrimeFactorsSET) and outputs an arraylist of them.
        thePrimeFactorsAL = new ArrayList<Integer>(PrimeFactorsSET);
        // theNewPrimeFactorsAL.addAll just adds all of the new elements to
        // the theNewPrimeFactorsAL ArrayList.
        theNewPrimeFactorsAL.addAll(thePrimeFactorsAL);
        // ALofcompoundedPrimeAL is supposed to add theNewPrimeFactorsAL to
        // each index.
        ALofcompoundedPrimeAL.add(theNewPrimeFactorsAL);
    }
    return (ALofcompoundedPrimeAL);
}

Спасибо за любое понимание.


person Relative0    schedule 13.01.2015    source источник
comment
Что это за язык?   -  person Svante    schedule 13.01.2015
comment
Похоже на Яву. Я добавил тег java.   -  person La-comadreja    schedule 13.01.2015


Ответы (1)


Кажется, что вы просто копируете ссылки. Например, после добавления theNewPrimeFactorsAL к ALofcompoundedPrimeAL вы переходите к addAll к тому же theNewPrimeFactorsAL в следующем цикле. В конце ALofcompoundedPrimeAL содержит n ссылок на тот же theNewPrimeFactorsAL, который содержит все элементы, добавленные к нему в любой итерации цикла.

Вам нужно создать новые списки, чтобы иметь новые списки.

person Svante    schedule 13.01.2015