ArrayList<ArrayList> hilfee

Status
Nicht offen für weitere Antworten.

scrubs

Mitglied
hallo leute,

ich bins wieder mal..also wie der titel schon verratet möchte ich ArrayList in ArrayList haben.

Code:
ArrayList<Object> erg1 = new ArrayList<Object>();
	
ArrayList<ArrayList> erg2 = new ArrayList<ArrayList>();

beim abfragen einer datenbank, werden die ergebnisse in erg1 "zwischengespeichert" danach gehts gleich weiter in erg2...somit hab ich für ArrayList erg2, die ergebnisse von erg2

Code:
while(rSet.next()){

    erg1.clear();
				
    erg1.add(rSet.getInt("ID"));
    erg1.add(rSet.getString("Name"));
    erg1.add(rSet.getString("Adresse"));
    erg1.add(rSet.getString("PLZ"));
    erg1.add(rSet.getString("Ort"));
				
    erg2.add(dberg);				
			
}

ich bekomm z.B 3 Results von der DB, die ersten 2 werte in erg2, werden aber vom letzten erg1 überschrieben..somit hab ich immer die selben Werte, [3, Meier, ..., ...., ...], [3, Meier, ..., ...., ...]
, [3, Meier, ..., ...., ...]


hmm irgendjemand ähnliche erfahrungen?

Danke
 
S

SlaterB

Gast
erg2.add(dberg);
heißt
erg2.add(erg1);
?

in jedem Fall hast du dieselbe Liste mehrmals drin,
erg1.clear();
sieht ja auch schon so schlimm aus, damit löschst du die vorher mühsam angesammelten Einträge

wenn du willst, dass die Werte aus erg1 kopiert werden,
dann musst du das selber machen:
erg2.add(new ArrayList(erg1));

oder einfach erg1 immer neuanlegen:
erg1 = new ArrayList();
statt
erg1.clear()
 

Maximum

Aktives Mitglied
Da du immer nur ein und dasselbe object der ArrayListe referenzierst löschst du den kompletten Inhalt mit erg1.clear() jedesmal.
Du muss für jeden Schleifendurchlauf ein neues Objekt erstellen:
Code:
erg1 = new ArrayList<Object>();
 

sliwalker

Top Contributor
Hoi,

ArraListen sind referenztypen.

Code:
while(rSet.next()){

    ArrayList<Object> erg1 = new ArrayList<Object>(); 
            
    erg1.add(rSet.getInt("ID"));
    erg1.add(rSet.getString("Name"));
    erg1.add(rSet.getString("Adresse"));
    erg1.add(rSet.getString("PLZ"));
    erg1.add(rSet.getString("Ort"));
            
    erg2.add(erg1);            
         
}

greetz
SLi
 

scrubs

Mitglied
oh shit es funktioniert..

danke... und warum geht das nicht wenn ich einfach die inhalte von erg1 lösch...und neue einträge einfüg...danach in erg2 reinlade....?
hmmmm versteh ich nicht ganz...bitte um erläuterung...

danke danke
 

sliwalker

Top Contributor
Hoi,

wie schon gesagt sind ArrayListen Referenztypen.
Dh. Du hast ein Objekt vom Typ ArrayList und wenn Du mittels des variablennamens drauf zugreifst, greifst Du immer auf ein und dieselbe ArrayList zurück.
Änderungen daran sind also allgemeingültig und nicht nur an einer bestimmten Stelle, einer bestimmten Methode, im programm.

Wenn Du erg1 in eine andere ArrayList hinzufügst, fügst Du die Referenz darauf hinzu.

Kurzum, Du möchstest für jeden datensatz eine eigene ArrayList haben, also musst Du auch eine neue referenz (ein neues Objekt) erstellen...

greetz
SLi
 

sliwalker

Top Contributor
Kein Problem. Gerne...

Stichwort: Referenztypen und primitive Datentypen...
Musst Du Dir mal angucken, um das zu verstehen. Und verstehen solltest Du es :)
 

scrubs

Mitglied
oh ja jetzt hab ichs wieder gecheckt... ja habs leida nach 2-3 mal durchlesen von basis, wie referenz und primitivdatentypen wieder vergessen...da sieht man wieder dass 2-3mal lesen nicht reicht..zumindest bei mir hehe...

so beim ersten ansatz, hab ich quasi nur die referenztypen vom erg1 in erg2 "kopiert" (geADDet). und bei 3 Datensätzen, also 3x erg2.add(erg1) hab ich 3 referenztypen die nur auf eine referenz zeigt...und deshalb auch 3mal den gleichen inhalt

danke für eure antworten, diese erfahrung merk ich mir jetzt fürs leben =) hehe
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S java rekursiv iterativ hilfee :s Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben