Array dynamisieren oder ArrayList verwenden?

S

saxopraxo

Mitglied
Hallo Leute.

Ich habe eine Frage zu einem Problem mit Array und ArrayList.
Das Array wird mit festen Grenzen definiert und die ArrayList ist eine Liste von Arrays.
Ich muss Daten auswerten und muss ich mit einem dynamischen Array arbeiten, weil ich die Grösse des Arrays am Anfang nicht weiss.
Dieses Array ist mehrdimenional und mit jedem gefundenen Wert und seinen Unterwerten (Index) soll das Array grösser werden.
In VBA gibt es eine Möglichkeit, ein Array zu vergrössern und zu verkleinern, je nachdem wie man es benötigt.
In JAVA habe ich diese Möglichkeit noch nicht gefunden. Wenn ich eine ArrayList benutze, dann ist ja jeder neue Index in einzelnes Array, das zur ArrayList addiert wird.
Ein „normales“ Array kann ich nachdem es definiert wurde, nicht mehr ändern.
Wie kann man da am besten vorgehen? Erst alles auszählen und dann das Array definieren?

Gruß

Saxopraxo
 
H

httpdigest

Top Contributor
Eine ArrayList ist keine Liste von Arrays. Es ist eine Implementierung der Schnittstelle `java.util.List` mit Hilfe eines einzelnen Arrays, das intern entsprechend dynamisch vergrössert wird, wenn nötig.
Nichtsdestotrotz kannst du natürlich als Elementtyp einer ArrayListe wiederum Arrays haben, wenn du dynamisch mehrere Arrays in einer Liste speichern möchtest.
 
T

temi

Top Contributor
In VBA gibt es eine Möglichkeit, ein Array zu vergrössern und zu verkleinern, je nachdem wie man es benötigt.
In JAVA habe ich diese Möglichkeit noch nicht gefunden.
Direkt lässt sich ein Java-Array nicht vergrößern. Der übliche Weg besteht darin, ein neues, größeres Array anzulegen, die Daten aus dem alten Array in das neue Array zu kopieren und dann die Referenz auf das neue Array, der Variablen zuzuweisen, die die Referenz auf das alte Array enthält.
Java:
int[] arr = int[100]; // z.B. ein int-Array
// ...
int[] temp = int[200];
System.arraycopy(old, 0, temp, 0, old.length);
arr = temp;

Ich würde allerdings zur ArrayList tendieren, wenn nicht ganz spezielle Gründe dagegen sprechen.
 
Zuletzt bearbeitet:
S

saxopraxo

Mitglied
Hallo,

danke für die schnelle Antwort.
So wie ich es verstehe:
ArrayList sind eine Liste von addierten Arrays.
Ich müsste dann für jeden neuen Index ein neues Array definieren und dann dazu addieren.
Die Arrays müssten dann über eine Variable hochgezählt werden beim definieren.

Gruss

Saxopraxo
 
T

temi

Top Contributor
Hier ist die "Anleitung" zur ArrayList

ArraList ist eine Implementation des Interfaces List

Java:
// erzeuge eine Liste für Strings
List<String> stringliste = new ArrayList<>();

// füge Daten hinzu
stringliste.add("Ein String");
stringliste.add("Hurra!");

// gib einen String wieder aus
System.out.println(stringliste.get(0)); // "Ein String"
 
T

temi

Top Contributor
Ich muss Daten auswerten und muss ich mit einem dynamischen Array arbeiten, weil ich die Grösse des Arrays am Anfang nicht weiss.
Dieses Array ist mehrdimenional und mit jedem gefundenen Wert und seinen Unterwerten (Index) soll das Array grösser werden.
Was soll das bedeuten? Hast du einen Wert, der eine Art Schlüssel darstellt und dazu mehrere Unterwerte?

Dann wäre vielleicht Map<> in Kombination mit List<> eine Lösung.

Java:
Map<String, List<String>> map = new HashMap<>();

Damit hast du jetzt zu einem Schlüssel (String) die Möglichkeit eine Liste von weiteren Strings zu speichern.

Du musst das natürlich auf deine gewünschten Datentypen anpassen.
 
W

White_Fox

Top Contributor
Ehrlich gesagt habe ich noch nie darüber nachgedacht wie ArrayList implementiert ist - ich habe es immer wie ein dynamisches Array verwendet.
Es ist eine Liste, kein Array, jaja...aber das interessiert dich doch eigentlich nicht:

Java:
ArrayList<SomeClazz> list = new ArrayList<>();    //Eine neue Liste, nur ist sie leer

list.add(new SomeClazz());     //Füge ein Element ein...hast du bei der Initialisierung einen Platz dafür
                            //vorgesehen? Nicht? Ja gut daß es kein ordinäres Array ist...

list.add(new SomeClass());    //Ja, noch ein Element für das vorher kein Platz reserviert wurde...
 
T

thecain

Top Contributor
ArrayList hat im Hintergrund auch ein Array. Wenn es voll ist, wird einfach in ein grösseres "umkopiert"
 
S

saxopraxo

Mitglied
Hallo Leute,

vielen Dank für die Hinweise und Tips. Das muss ich ausprobieren.
Meine Daten sind mehrdimensional, z.B. Name, Anhang, Wert 1, Wert 2.
Eigentlich müsste man Matrix dazu sagen.
z.B.:
0.0, 0.1, 0.2, 0.3, 0.4
1.0, 1.1, 1.2, 1.3, 1.4
2.0, 2.1, 2.2, 2.3, 2.4
...
n.0, n.1, n.2, n.3, n.4

Wobei ich am Anfang nicht weiss, wie gross "n" sein wird.
Deshalb auch die Idee mit der ArrayList.
Allerdings weiss ich nicht so recht, wie ich das am besten bewerkstelligen kann, zum anlegen, eintragen und wieder auslesen.

Gruss
 
T

temi

Top Contributor
Meine Daten sind mehrdimensional, z.B. Name, Anhang, Wert 1, Wert 2.
Das 2. Beispiel ist leider nicht ganz verständlich. Was ist am 2. Beispiel der Name?

Ist Name der Schlüsselwert (also der Spaltenkopf) und daran hängen dann der Anhang und Wert 1, 2, 3, n?

Oder ist es wie im zweiten Beispiel eine Tabelle mit 5 Spalten und n Zeilen?

Etwas konkreter müsstest du schon werden, damit man dir helfen kann.
 
L

LimDul

Top Contributor
Und ist es wirklich eine Matrix? Wenn du sagst, deine Daten sind mehrdimensional. Ist das nicht in Wirklichkeit ein eigenes Objekt mit einer eigenen Klasse?

Java:
public class Daten {
private String name;
private String anhang;
private int wert1;
private int wert2;
}
 
W

White_Fox

Top Contributor
Meine Daten sind mehrdimensional, z.B. Name, Anhang, Wert 1, Wert 2.
Eigentlich müsste man Matrix dazu sagen.

Ja mei, da nehmste das:
Java:
ArrayList<ArrayList<Double>> matrixMasterlist = new ArrayList<>();

ArrayList<Double> newMatrixLine = new ArrayList<>();
for(Double d = 0.0; d < 0.5; d += 0.1){
    newMatrixLine.add(d);
}

matrixMasterlist.add(newMatrixLine);

//...

An deiner Stelle würde ich das in eine eigene Klasse kapseln, die auch darauf acht gibt daß z.B. alle Zeilen die gleiche Länge haben und nach außen hin Methoden wie addRow() oder addRows( int rowNum) (fügen jeder Zeile ein Element hinzu) oder setElement(int row, int column, double element) bereitstellen.

Oder, sicher noch cleverer: Es gibt garantiert schon jemanden, der Matritzen und Matrixoperationen bereits implementiert hat. Such dir eine entsprechende Bibliothek.

Edit:
Wenn du sagst daß man eigentlich von einer Matrix reden müßte, dann unterstelle ich daß es auch eine Matrix ist. Wenn es keine Matrix ist - naja, dann kannst du zumindest das Konstrukt einer ArrayList von ArrayListen verwenden.
 
S

saxopraxo

Mitglied
Hallo,

der Gedanke mit der Matrix war falsch, das habe ich jetzt erkannt.
Eher mit dem Schlüsselwort ist der richtige Weg. "Name" wäre das Schlüsselwort und daran hängen dann die anderen Elemente.
Aber "LimDul" hatte die Idee mit dem Objekt. Wenn ich so darüber nachdenke, dann sind ja meine Elemente zusammen ein Objekt. Es sind ja immer die gleichen Elemente vorhanden und müssen zusammengefasst und ausgewertet werden.
Ich mache JAVA noch nicht so lange und auf diese Idee war ich garnicht gekommen.
Das müsste dann eine Liste von Objekten ergeben?

Gruss
 
W

White_Fox

Top Contributor
@saxopraxo Beschreibe doch bitte mal dein Problem. NICHT deinen Lösungsansatz.

Das, was du jetzt schreibst, klingt mir viel (soweit ich es, im Kontext dessen was du bisher geschrieben hast, interpretieren kann) eher nach HashMap:
Java:
HasMap<String, ArrayList<Double>> masterMap = new HashMap<>();

ArrayList<Double> list = new ArrayList<>();
for(double d = 0; d < 0.5; d += 0.1){
    list.add(d);
}

masterMap.put("Irgendein Schlüsselwort für eine Gruppe von lauter Doubles", list);
 
F

fhoffmann

Top Contributor
Wenn ich so darüber nachdenke, dann sind ja meine Elemente zusammen ein Objekt.
Ja, es ist immer eine gute Idee, aus zusammengehörenden Dingen eine eigene Klasse (Objekt) zu machen!
(Eine Liste von Listen hat immer einen komischen "Geruch" (mit "Geruch" meine ich: https://en.wikipedia.org/wiki/Code_smell).)
Das müsste dann eine Liste von Objekten ergeben?
Du musst nicht unbedingt eine List benutzen. Es kann auch eine Map sein.
Dann kanst du zu einem Schlüsselwort (key) ein Objekt deiner neuen Klasse (value) speichern.
 
Zuletzt bearbeitet:
S

saxopraxo

Mitglied
Hallo,

vielen Dank für die vielen Tips und Hinweise. Ihr habt mir sehr geholfen.
Ich werde jetzt mit dem "Objekt" arbeiten und erst mal selbst versuchen, das Programm zu erstellen.
Wenn ich dann wieder Probleme habe, dann melde ich mich wieder und frage bei Euch nach.

Gruss
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Direktes return eines Array geht nicht Allgemeine Java-Themen 20
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
H Array mit dem Datentype String[] initializieren Allgemeine Java-Themen 7
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
parrot Array Aufgabe Allgemeine Java-Themen 3
N String Array Eingabe Allgemeine Java-Themen 6
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
N Variablen Array Länge ändern. Allgemeine Java-Themen 8
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
W Enumeration ein Array/List als Eigenschaft mitgeben - warum geht das nicht? Allgemeine Java-Themen 0
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
A Array Problem Allgemeine Java-Themen 8
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
F Datei in String-Array einlesen Allgemeine Java-Themen 8
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
E Angabe wie groß Array sein soll und in for-schleifen diesen Array füllen Allgemeine Java-Themen 3
F 3 Dimensionales Array mit Allgemeine Java-Themen 9
M Steueralgorithmus verwandelt Array in Anfangszustand Allgemeine Java-Themen 9
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
D Datentypen 2-3 Baum erstellen mit geordnetem int-array Allgemeine Java-Themen 0
T Objekt in Array packen Allgemeine Java-Themen 6
M Zahlen in Array anordnen Allgemeine Java-Themen 8
M Eclipse Unvollständigen Array ansteuern Allgemeine Java-Themen 2
D Erste Schritte Im Array Werte tauschen Allgemeine Java-Themen 5
Xge For/Array Error: IndexOutOfBounds Allgemeine Java-Themen 4
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
J Variablen Array ertellen bei model.put Allgemeine Java-Themen 13
S Eindimensionales Array in zweidimensionales Array speichern Allgemeine Java-Themen 5
R convert 2d array list to 2d array Allgemeine Java-Themen 1
J json Array würfel Spalten durcheinander Allgemeine Java-Themen 9
M Array umbau oder Alternative? Allgemeine Java-Themen 5
L Datentypen 3D Array Allgemeine Java-Themen 3
M 2D Array mit unterschiedlichen Längen erstellen und befüllen Allgemeine Java-Themen 11
Mario1409 Methoden JSON Array von URL Allgemeine Java-Themen 8
E Swing Array mit Bildern in GUI darstellen Allgemeine Java-Themen 2
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
H Zweidimensionales Array - Zellen der Tabelle verbinden Allgemeine Java-Themen 2
M Zweidimensionales Array mit Binärzahlen füllen Allgemeine Java-Themen 8
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
G Array ohne Aufzählungszeichen ausgeben Allgemeine Java-Themen 6
J Wie kann ich ein Java Array als Säulendiagramm ausgeben? Allgemeine Java-Themen 2
Z 2D Array Pixels reparieren Allgemeine Java-Themen 2
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
B Polibios Array erweitern Allgemeine Java-Themen 1
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
J Array-List Bubble-Sort Allgemeine Java-Themen 12
4 Variablen Int-Array Int Zuweisen Allgemeine Java-Themen 7
J Array Allgemeine Java-Themen 8
Z Array mit unterschiedlichen Werten Allgemeine Java-Themen 1
L sortiertes Array im main aufrufen klappt nicht. Allgemeine Java-Themen 3
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
A Mit dem letzten bis zum ersten Wert aus Array rechnen Allgemeine Java-Themen 15
A Vector Strings in Array splitten Allgemeine Java-Themen 6
I Muster in Array suchen Allgemeine Java-Themen 10
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
S Variablen String[] Array per schleife in int[] einlesen Allgemeine Java-Themen 8
B Zahlen manuell eingeben und in Array Speichern Allgemeine Java-Themen 2
R Wärmeleitung, 3d-Array Allgemeine Java-Themen 2
T Java Array in Methoden Allgemeine Java-Themen 1
D Erste Schritte Array von einer forschleife nach ausserhalb trasferieren Allgemeine Java-Themen 3
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
T Array in .txt oder .xml? Allgemeine Java-Themen 15
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
C Boolean Array Allgemeine Java-Themen 4
C Objekte in Array List speichern? Allgemeine Java-Themen 1
I quadratisches Array füllen Allgemeine Java-Themen 11
T Array - Wert am nächsten zur vollen Sekunde Allgemeine Java-Themen 20
K Array in ArrayList Allgemeine Java-Themen 16
K Array übertragen Allgemeine Java-Themen 5
K Array, Int expected, Integer found Allgemeine Java-Themen 5
KilledByCheese 2D-Grafik 2D-Array als Gitter darstellen Allgemeine Java-Themen 2
RalleYTN Input/Output Clip als ein Array von Bytes? Allgemeine Java-Themen 2
JG12111989 char-Array in int-Array umwandeln Allgemeine Java-Themen 27
L generisches Array Allgemeine Java-Themen 1
M String Array Vector komprimieren und verschicken Allgemeine Java-Themen 3
S JavaMail - MailSubject,MailFrom,MailDate in String Array speichern NullPointerException Allgemeine Java-Themen 2
M double Array Allgemeine Java-Themen 8
2 String Array in Datei schreiben und wieder davon lesen Allgemeine Java-Themen 2
G problem: array aus objekten Allgemeine Java-Themen 10
J Java String to Array = Crash Allgemeine Java-Themen 6
F 2D Array in jList einfügen Allgemeine Java-Themen 8
K Einfaches Array in 2 neue aufteilen. Allgemeine Java-Themen 2
E Problem mit Array vergleich Allgemeine Java-Themen 4
B Muster in 2D-Array finden Allgemeine Java-Themen 4
S Best Practice System.arrayCopy verändert Ziel-Array Allgemeine Java-Themen 2
R Byte Array Zeichensuche Allgemeine Java-Themen 6
B Klassen Eigene Klasse als Array benutzen Allgemeine Java-Themen 3
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
S Array in Combobox ausnutzen??? Allgemeine Java-Themen 5
O Byte-Array zu String Allgemeine Java-Themen 7

Ähnliche Java Themen

Anzeige

Neue Themen


Oben