ArrayList bestehend aus ArrayList?

SevenFlames

Mitglied
Hallo zusammen,

leider konnte mir beim letzten Mal keiner helfen, zumindest hat keiner geantwortet... Ich hoffe, dass Ihr dieses Mal einen Rat wisst :)

Ich bin ein wenig verzweifelt. Ich muss ein Programm in schreiben, bei dem aus einer Datei die Werte ausgelesen und anschließend auch ausgegeben werden können. In der Datei liegen die Werte in folgendem Format vor:

"TIME","MAF","MAP"
0,0.23.98
2.5,3.2,75

Das ist nur ein Beispiel. Ich lese nun also zunächst die Parameter aus: TIME, MAF und MAP. Diesen sind nun folgende Werte zuzuweisen:

TIME: 0 und 2.5
MAF: 0.23 und 3.2
MAP: 98 und 75

Im Endeffekt sind die Dateien nachher viel grösser und der Umfang ist vorher nie genau festgelegt, so dass ich die Grösse des Feldes nicht einschätzen kann, weder in Höhe, noch in Breite.

Also hatte ich mir überlegt, dass ich eine ArrayList mache, die aus Objekten des Typs ArrayList besteht. So kann ich also beliebig viele Elemente anfügen und diese dann in der Breite beliebig auffüllen. Aber das geht irgendwie nicht. Ich öffne die Datei und kann eine ArrayList mit den Parametern anlegen. Die gibt das Programm dann auch aus. Wenn ich aber den Parametern die Werte zuweisen möchte, dann meldet sich der Compiler und sagt, dass die Datentypen nicht zusammenpassen.

In folgendem Beispiel habe ich nur die Problemstelle eingefügt.

Java:
if ((c != 44) && (c != '0'))
{
	parameter=parameter + c;
}
if ((c == 44) && (endeParameterliste == false))
{
	parameter.replaceAll("\"","");
	anzahlParameter++;
	System.out.println("anzahlParameter ="+anzahlParameter);
	zeileDaten.add(parameter);
	datenliste.add(zeileDaten);
	zeileDaten.clear();		// geschriebenes Element wieder löschen
	System.out.println(parameter);
	parameter="";
}

....

for (int i=0;i<zeile.length();i++)
{
	c = zeile.charAt(i);
	if ((c != 44) && (c != 0)) wert = wert + c;
	else
	{
		zeileDaten=datenliste.get(counter); 
		zeileDaten.add(wert);
		datenliste.set(counter,zeileDaten);
		counter++;
		wert = "";
	}
}

c ist die aktuelle Zeile der Datei. Ich bringe die unterschiedlichen Werte zu den Parametern zunächst in ein String Format, weil sich auch diese Formate ändern. Einige Werte kennen nur ON / OFF, andere haben bis zu 7 verschiedene, vordefinierte Zustände, andere sind reine Zahlen...
zeileDaten und datenliste sind ArrayListen mit dem ersten Teil ist datenliste bereits gefüllt worden. Ich habe oben extra darauf geachtet, dass datenliste mit zeileDaten "vorgefüttert" wird, so dass ich diese Elemente nur noch auslesen und dann zeilenweise "anreichern" muss.

Aber es gibt hier immer wieder Probleme. Mein Mozilla ist randvoll mit Java Seiten und Google-Tabs, also bitte: Ich habe gesucht wie ein Irrer. Aber ich finde einfach keine Lösung zu meinem Problem.

Falls also jemand Rat weiß, bitte meldet Euch.


Vielen Dank
Marc
 

andiv

Bekanntes Mitglied
Du schreibst der Compiler meldet irgendwas mit "Datentypen passen nicht zusammen", aber zeigst uns ein Stück Code in dem kein einziger Datentyp "vorkommt". Wie wärs du zeigst uns auch den Teil wo du deine Variablen deklarierst?
 

SevenFlames

Mitglied
Hi Andy,

da muss ich Dir recht geben:

Der Programmübergreifende Teil:


Java:
// Inhalte der eingelesenen Datei

	ArrayList datenliste = new ArrayList();
	ArrayList zeileDaten = new ArrayList();


Die Deklaration innerhalbd er Methode:

Java:
		String parameter = "";
		String wert = "";
		String zeile;
		int b;
		int counter = 0;
		char c;
		boolean endeParameterliste = false;


Falls ich noch etwas vergessen haben sollte, sag bitte bescheid.


Bis denne
Marc
 

Marco13

Top Contributor
Wenn keiner antwortet liegt das nicht notwendigerweise daran, dass keiner einen Rat oder eine Lösung hat. Im Zweifelsfall ist "keine Antwort" zu interpretieren als der Rat "Formuliere deine Frage mal anders" :D

Also... mal abgesehen davon, ob nun ArrayList oder LinkedList, und abgesehen davon ob c nun eine Zahl oder ein Character ist und was an Zeile 44 so besonderes ist....

Du hast irgendwelche Daten in der Form
Code:
"TIME", "MAF","MAP"
0,      0.23, 98
2.5,    3.2,  75
die aber auch
Code:
"TIME", "MAF","MAP", "MIP", "MUP"
0,      0.23, 98,    12,    34
2.5,    3.2,  75,    16,    56
1.3,    5.6,  72,    43,    67
sein könnten. Mit anderen Worten: Eine ganz normale Tabelle ?! :autsch:

Und du willst jetzt die Spalten dieser Tabellen als Datenstruktur haben (d.h. du willst das auch nicht mit einer Datenbankanbindung o.ä. lösen...) ?

Dann könntest du z.B. zwei Klassen machen wie z.B.
Java:
class Table
{
    public void addColum(Columns column) { ... }
    public int getNumColumns() { ... }
    public Column getColumn(int index) { ... }
    public Column getColumn(String name) { ... } // evtl.
}

class Column
{
    public String getHeader() { ... }
    public double getValue(int row) { ... }
}

Darauf könnte man dann z.B. so zugreifen wie
Java:
double maf0 = table.getColumn("MAF").getValue(0); // Liefert 0.23 (aus dem Beispiel)
double map0 = table.getColumn("MAP").getValue(1); // Liefert 75 (aus dem Beispiel)

Stimmt das soweit?
 

SevenFlames

Mitglied
Hallo Marco,

vielen Dank für Deine ausührliche Antwort!

Ich gebe Dir recht, es kann an meiner Frage liegen. Der Haken ist, wenn man ein Laie in etwas ist, dann hat man meist keine Vorstellung davon, was die Nicht-Laien so alles an Informationen benötigen :)
Ich programmiere für ein Semester im Verbundstudiengang Wirtschaftsingenieurwesen. Du siehst also: Ich bin kein Programmierer und ich mache das noch neben meiner regulären Arbeit... Und Java fällt mir sehr schwer. Ich habe mal ganz früher (vor 15 Jahren) Turbo Pascal mit einigem Erfolg programmiert, aber das kann man wirklich nicht vergleichen.

Deine Lösung gefällt mir sehr! So wie ich sie verstehe, werden die Daten aber jeweils immer wieder einzeln ausgelesen? Ich würde es gerne so realisieren, dass ich die Daten in Form einer Variablen oder eines Objekts im Speicher liegen habe und so gar keinen Festplattenzugriff mehr brauche, egal was ich mit den Daten vor habe.
Die Daten liegen tatsächlich im Format einer csv Datei vor. Das fehlte bestimmt auch als Info in meinem Text.

Danke noch mal!
Marc
 

SevenFlames

Mitglied
Sorry, ich bin es noch mal. Hilft es eigentlich, wenn ich das ganze Programm poste? Ich habe jetzt nur einen Ausschnitt gepostet, weil ich mir dachte, dass sonst zuviele Infos hier liegen. Das Programm hat 320 Zeilen, ist also noch überschaubar.


Bis denne
Marc
 

andiv

Bekanntes Mitglied
Gibt es einen bestimmten Grund dafür, dass du keine Generics nutzt? Wenn du ArrayList<String> und ArrayList<ArrayList<String>> verwenden würdest, dann könnte der Compiler für dich erkennen, wann die Typen nicht zueinander passen und nicht erst die JVM zur Laufzeit.
 

Landei

Top Contributor
Eine "Billiglösung" wäre, alle Spalten einfach in eine Map zu packen:

Java:
String[] columns= {"TIME","MAF","MAP"};
Map<String, List<Double>> map = new HashMap<String, List<Double>>();
for(String column : columns) {
  map.put(column, new ArrayList<Double>();
}
for(double[] values : getSomehowNextValueLine()) {
   for(int i = 0; i < values.length(); i++) {
       map.get(columns[i]).add(values[i]);
   }
}

Nachträglich können auch weitere Spalten hinzugefügt werden.

Alternativ kann man auch zeilenweise vorgehen, also Maps in eine List stecken (was die üblichere Vorgehensweise ist)

Objektorientiert wie vom Vorredner vorgeschlagen wäre es natürlich hübscher, aber da müsste man mehr über deinen Anwendungsfall wissen.
 

SevenFlames

Mitglied
Hallo Andy,

danke für den Tipp. Das werde ich machen. Es ist aber der Compiler, der den Fehler erkennt. Ich werde das aber trotzdem machen, dann ist die Zuordnung nachher beim Lesen des Programms auch viel einfacher!

Code:
C:\Test\IntelligentViewerUI.java:257: incompatible types

found   : java.lang.Object

required: java.util.ArrayList

							zeileDaten=datenliste.get(counter); 

							                         ^


Hallo Landei,

mit Maps habe ich noch nie gearbeitet. Und um ehrlich zu sein, sagt mir der HashWert jetzt auch nur etwas, weil ich in meinem beruflichen Umfeld mit Wegfahrsperren zu tun habe :)
Aber ich schaue mir das mal in der API an. Vielleicht kann ich das einfacher umsetzen als meinen ursprünglichen Plan mit den ArrayLists.


Danke für Eure Hilfe!
Marc


PS: Braucht Ihr das Programm noch? Dann könnt Ihr es ja starten und sehen, wie ich die Datei versuche zu öffnen...
Aber bloss nicht lachen! Da ist sicher noch eine ganze Menge Optimierungspotential vorhanden :D
 

Marco13

Top Contributor
Deine Lösung gefällt mir sehr! So wie ich sie verstehe, werden die Daten aber jeweils immer wieder einzeln ausgelesen? Ich würde es gerne so realisieren, dass ich die Daten in Form einer Variablen oder eines Objekts im Speicher liegen habe und so gar keinen Festplattenzugriff mehr brauche, egal was ich mit den Daten vor habe.

Nicht notwendigerweise :) Das, was ich dort hingeschrieben hatte, enthielt ja erstmal keine Implementierungen. Wenn man das im Rahmen eines "Softwareprojektes" "planen" würde, würde man, WENN man das denn so haben will, ohnehin sowas schreiben:
Code:
[b]interface[/b] Table
{
    int getNumColumns();
    Column getColumn(int index);
    Column getColumn(String name);
}
 
[b]interface[/b] Column
{
    String getHeader();
    double getValue(int row);
}

D.h. man würde erstmal die Interfaces erstellen, in denen einfach nur drinsteht, was man mit diesen Dingern machen können will.

DANN (danach) könnte man sich eine passende Implementierung überlegen. Die KÖNNTE sowas machen wie
Java:
class DamnSlowTable implements Table
{
    public Column getColumn(String name)
    {
        return new DamnSlowColumn(name);
    }
    ...
}
class DamnSlowColumn implements Column
{
    public double getValue(int row)
    {
        return readTheWholeFrigginFileAndSearchTheDataFor(row);
    }
}

D.h. bei jedem Zugriff würde man die Datei durchsuchen :autsch:

So war das aber nicht gedacht ;) Ich bin schon davon ausgegangen, dass man dies Tabelle EINmal einlesen würde, und dann liegt sie im Speicher und man kann schnell daruf zugreifen:
Java:
class Column
{
    private double rowData[];

    public Column(double rowData[]) 
    {
        this.rowData = rowData;
    }

    public double getValue(int row)
    {
        return rowData[row];
    }

Man würde dann am Anfang des Programms EINmal die komplette Datei einlesen. Dann würde man lauter solche Column-Objekte erstellen. Denen werden die eingelesenen Daten übergeben, und die speichern sie intern. Aus diesen Column-Objekten baut man sich dann ein Table-Objekt. Und danach kann man ohne irgendwelche komplizierten, unübersichtlichen verschachtelten Listen schnell und einfach auf die Daten zugreifen.
 

SevenFlames

Mitglied
Hallo Marco,

vielen, vielen Dank für Deine ausführliche Antwort. Das ist genial, auf so eine Idee wäre ich gar nicht gekommen :applaus:

Das werde ich machen. Der Umgang damit ist erheblich einfacher als mit meiner komischen Routine und außerdem kann ich dann die ganze Handhabung in eine andere Klasse auslager, so dass ich den Quellcode des eigentlichen Programms nicht mit der Handhabung der Daten überladen muss.

Danke noch mal. Du hast mir wirklich sehr geholfen! Auch vielen Dank an alle anderen, die hier fleißig gepostet haben. Die Ideen waren alle sehr lehrreich für mich!


Bis denne
Marc
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb ArrayList allgemein halten Java Basics - Anfänger-Themen 6
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
W if-Abfrage bei ArrayList-Methodenaufrufen - Wie löse ich das? Java Basics - Anfänger-Themen 6
W ArrayList und toString Java Basics - Anfänger-Themen 17
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
M 2d ArrayList durchgehen Java Basics - Anfänger-Themen 2
Blkckroll45 Arraylist Java Basics - Anfänger-Themen 6
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
M ArrayList<TreeNode<T>> fortlaufende Nummerierung der Elemente Java Basics - Anfänger-Themen 5
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
F Erste Schritte Zahlenreihe von Arraylist in 3erBlöcke sortiert in neue Arraylist Java Basics - Anfänger-Themen 2
M ArrayList mit einer Schleife befüllen Java Basics - Anfänger-Themen 2
F Methode ArrayList mit Eingabewert Java Basics - Anfänger-Themen 2
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
thobren jtable arraylist Java Basics - Anfänger-Themen 12
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
Zeppi OOP ArrayList Java Basics - Anfänger-Themen 2
P ArrayList Java Basics - Anfänger-Themen 4
L ArrayList auf 4 Elemente begrenzen Java Basics - Anfänger-Themen 56
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
J ArrayList auf bereits vorhanden eintrag prüfen Java Basics - Anfänger-Themen 5
M For Schleife/ArrayList Java Basics - Anfänger-Themen 12
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
L Längstes Element einer ArrayList ausgeben Java Basics - Anfänger-Themen 9
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
L Methoden ArrayList Werte hinzufügen und löschen Java Basics - Anfänger-Themen 32
M ArrayList in GUI ausgeben Java Basics - Anfänger-Themen 1
J Nur bestimmter Typ aus der ArrayList ausgeben. Java Basics - Anfänger-Themen 9
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
C Sortieren einer ArrayList Java Basics - Anfänger-Themen 2
krgewb ArrayList von ArrayList Java Basics - Anfänger-Themen 2
R ArrayList Problem Java Basics - Anfänger-Themen 6
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
O Namen (mit Umlauten und ß) in einer ArrayList suchen Java Basics - Anfänger-Themen 5
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
S ArrayList in andere Klasse übernhemen Java Basics - Anfänger-Themen 5
M Letztes Element einer ArrayList Java Basics - Anfänger-Themen 12
B Objektverwaltung mit ArrayList in einer seperaten Klasse Java Basics - Anfänger-Themen 24
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
D Collections Arrays in ArrayList abspeichern Java Basics - Anfänger-Themen 6
F java.util.ArrayList Java Basics - Anfänger-Themen 3
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Arraylist zu einem Array bringen mit Verschachtelung Java Basics - Anfänger-Themen 11
N Methode mit einer Arraylist Java Basics - Anfänger-Themen 106
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
H ArrayList Java Basics - Anfänger-Themen 7
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
M JTextField in ArrayList speichern Java Basics - Anfänger-Themen 4
C ArrayList mit return zurückgeben Java Basics - Anfänger-Themen 13
K Zahlenfolge ArrayList Java Basics - Anfänger-Themen 3
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
F Array in ArrayList ablegen Java Basics - Anfänger-Themen 3
V ArrayList Java Basics - Anfänger-Themen 1
Z Runden Arraylist Java Basics - Anfänger-Themen 9
X Frage zur einer ArrayList in einer ArrayList Java Basics - Anfänger-Themen 5
F Arraylist als Pfadausgabe Java Basics - Anfänger-Themen 10
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
M Problem mit ArrayList Java Basics - Anfänger-Themen 32
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
X Problem mit Arraylist in Arraylist Java Basics - Anfänger-Themen 2
O HashMap - ArrayList Java Basics - Anfänger-Themen 29
M UML-Klassendiagramm ArrayList Java Basics - Anfänger-Themen 1
O ArrayList oberflächig durchsuchen Java Basics - Anfänger-Themen 3
I "\n" aus ArrayList enfernen, aber wie?! Java Basics - Anfänger-Themen 4
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
Jackii ArrayList ausgabe ohne Dopplung Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben