Lista w liście i clear()

0

Witajcie.
Mam pytanie :) jak to działa, bo nie za bardzo rozumiem. Mam listę a w niej inne listy. Przykładoy fragment kodu poniżej

 for (int i = 0; i < wielkosc; i++)
            {
               
                Model = (DefaultTableModel) TabelaFaktur.getModel(); 
                String[] faktura = wszystkieFaktury[i].split("  ");
                Model.addRow(faktura);
                
                fileReaderPozycje = new FileReader(pliki[1]);
                BufferedReader bufferedReaderPozycja = new BufferedReader(fileReaderPozycje);

                StringBuffer stringBufferPozycja = new StringBuffer("");
                String linePoz = null;
                while ((linePoz = bufferedReaderPozycja.readLine()) != null) {
                stringBufferPozycja.append(linePoz + ";");
                }

                String[] wszystkiePozycje= stringBufferPozycja.toString().split(";");
                                
                
                int wielkoscPoz = wszystkiePozycje.length;            
              
                
                for (int j = 0; j < wielkoscPoz; j++)
                {
                    String[] pozycja = wszystkiePozycje[j].split("  ");
                    if (i == Integer.parseInt(pozycja[0].trim()))
                    {
                            ListaPozycji.add(pozycja[1]);
                            ListaPozycji.add(pozycja[2]);
                            ListaPozycji.add(pozycja[3]);
                            ListaPozycji.add(pozycja[4]);
                    }
                    
                }
                ListaPozycjiWLiscie.add(ListaPozycji);
                ListaPozycji.Clear();

Analizując ogólnie ostatnie linie no to tak, w pętli uzupełniam sobie ListaPojazdy o nowe elementy i wypadam z pętli a następnie wpisuję tą listę do list ListaPozycjiWLiscie. No i czyszczę ListęPozycji a następnie wracam do pętli i znów ją uzupełniam i tak dalej. Dlaczego opcja Clear czyści mi zarówno ListePozycji jak i ListaPozycjiWLiscie? nie rozumiem czemu tak to działa. Czyszczę przecież podrzędną listę a nie nadrzędną? czegoś nie 'commituje', przekładając na język bazodanowy?

0

bo do ListaPozycjiWLiscie dodajesz referencje do listy a nie jej kopie

0

o dobra sugestia :) ale jest to mój pierwszy program w Javie i tak po omacku szukam :) możesz mi podpowiedzieć jak zachować wartość w ListaPozycjiWLiscie a po każdej pętli czyścić ListaPozycji?

0

nie100sowny 70% z programu, który analogicznie robiliśmy na uczelni podczas zajęć. 30% to mój wymysł na kolanie

0

Mozesz zrobić

ListaPozycjiWLiscie.add(new ArrayList(ListaPozycji));

albo, co sprowadza sie do tego samego, tworzyc gdzies nowa liste zawsze na poczatku zamiast ja na koncu czyscic

0

Jako, że są to referencje, to zamiast usuwania zagnieżdżonej listy (co spowoduje usunięcie dodawanego do nadrzędnej elementu, można zrobić taki myk:

ListaPozycji = new ArrayList<String>();

nie wyczyści nam referencyjnie, ale "postawi" czystą listę. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1