Zweidimensionale Liste

dsNDesign

Erfahrenes Mitglied
Hei,
ich versuche gerade eine zweidimensionale Liste zu erstellen. Zuerst hatte ich es als Array, da ich jedoch später (unbegrenzt) neue Zeilen hinzufügen möchte, ist eine Liste angebrachter.

Die Liste soll mit Objekten befüllt werden.
So stelle ich es mir vor:

Objekt1 Objekt2 Objekt3 Objekt 4
Objekt1 Objekt2 Objekt3 Objekt 4
Objekt1 Objekt2 Objekt3 Objekt 4
Objekt1 Objekt2 Objekt3 Objekt 4
Objekt1 Objekt2 Objekt3 Objekt 4
Objekt1 Objekt2 Objekt3 Objekt 4
Objekt1 Objekt2 Objekt3 Objekt 4
...

In jeder Zeile soll eine bestimmte (zuvor festgelegte) Anzahl an Objekten sein.

Wie stelle ich das nun an? Mit ArrayList mache ich doch im Grunde eine normale Liste, wo ich halt direkt auf bestimmte Zeilen zugreifen kann?!

Später möchte ich dann auf jedes einzelne Objekt zugreifen können.

PS:
Hatte es vorhin mal so (Kreise ist mein Objekt):
Java:
protected ArrayList<Kreise[]> list = new ArrayList<Kreise[]>();

for(int i = 0; i < anzVer; i++) {
	Kreise[] reihe = new Kreise[anzPos];
	for(int j = 0; j < anzPos; j++) {
		reihe[j] = new Kreise();
	}
	list.add(new Kreise[anzPos]);
}

Jedoch klappt damit die Verarbeitung nicht so ganz.
 
Hi

Also jede Zeile ist gleich lang?
Dann solls wohl eher eine Liste von Arrays werden?

Zur Liste selbst:
ArrayList ist, wie der Name sagt, ein Array.
Die Klasse übernimmt Sachen wie das Vergrößern (wenn nötig) in sich drin,
aber es bleibt ein Array. Auch wenns nicht selbst programmiert wird,
es muss vergrößert werden und ist dabei viel langsamer als eine echte Liste (umkopieren...)

Verwende die LinkedList, wenn du eine Liste willst.
Die hat dann eben wieder Listentypische Nachteile bez. Zugriff auf Elemente.
0-1-2-3-4-5-6-7-8 usw. durchschleifen ist kein Problem,
aber ein Durcheinander wie 7-2-5-1 schon. Langsam.
 
Danke für deine Antwort.

Ja, jede Zeile ist gleich lang.

Hab es nun auch hinbekommen.

Erstelle alles so:
Java:
protected ArrayList<Kreise[]> list = new ArrayList<Kreise[]>();
for(int i = 0; i < anzVer; i++) {
	Kreise[] reihe = new Kreise[anzPos];
	for(int j = 0; j < anzPos; j++) {
		reihe[j] = new Kreise();
	}
	list.add(reihe);
}

Zugriff erfolgt dann so:
Java:
Kreise[] felder = list.get(i);
felder[j];
 
Hast du den oberen Beitrag eigentlich gelesen? :rolleyes:
Du machst da nichts Anderes als ein Array aus Arrays.
Wolltest du nicht eigentlich eine Liste...?

Und für den Zugriff musst du nicht extra eine neue Zwischenvariable anlegen.
Das geht auch alles in einer Zeile.
 
Ja, ich wollte ja einfach etwas, wo ich variabel neue Einträge hinzufügen kann. Und das kann ich ja bei einer ArrayList ohne große Probleme.

Und da der Zugriff auf die einzelnen Objekte wichtig ist, ist eine normale Liste ja nicht ganz so geeignet, da ich dort immer die ganze Liste durchsuchen müsste!?
 
Keine Ahnung, wofür du die Liste verwenden willst.
Musst du sehr durcheinander auf die Elemente zugreifen
oder eher immer von vorn bis hinten durchschleifen?

Zweites geht mit der LinkedList ganz problemlos.

Sonst...
die Arraysache würde sehr verbessert,
wenn man ca. abschätzen kann, wieviel Elemente es am Schluss sein werden.
Bzw. man kann schon später noch ändern, aber am Besten so wenig wie möglich Größenänderungen, also den Verbrauch möglichst gut im Vorhinein bestimmen.
Geht das bei deinem Anwendungsfall?
Die ArrayList bietet nämlich Möglichkeiten, ihr so einen "Tipp" zu geben,
damit sie sich gleich anpasst, statt immer wieder durch add´s Vergrößern zu müssen.
 

Neue Beiträge

Zurück