Matrix, ArrayList, null-Zellen

Status
Nicht offen für weitere Antworten.

diggaa1984

Top Contributor
hiho,

ich hab grad ein kniffliges Problemchen. Und zwar habe ich eine Matrix, welche als Zelleninhalt Listen von Strings hält. Die Matrix selbst basiert ebenfalls auf Listenstrukturen, sieht also wie folgt aus:
Java:
private List<List<List<String>>> matrix;

liest sich blöde, aber is zumindest ein Versuch :)

So um nun bei ner größeren Matrix nicht alle Zellen mit irgendwelchen, größtenteils leeren, Listen zu erzeugen, dachte ich, ich erzeuge nur in den Zellen ein Listenobjekt, wo ich auch definitiv ne Information ablegen muss, also die Liste später mind. 1 Element beinhaltet.

So, das ganze muss nur eine obere Dreiecksmatrix sein, das bedeutet die Länge der Spalten entspricht exakt dem Spaltenindex+1 (Spalte 0 = 1 Reihe, Spalte 5 = 6 Reihen) .. daher auch "col+1" im Code. So leider hilft mir diese initiale Kapazität kein Stück, ausser das ArrayList-intern nichts erweitert werden muss. Die Size bleibt aber weiterhin 0 ... und genau das schlägt dann bei der Prüfung in Zeile 9 quer. Denn ich erhalte hier nicht ne Angabe ob das Element null ist oder existiert, sondern ich bekomme eine IndexOutOfBounds-Exception, was mir total nich weiterhilft :)
Java:
private void addToMatrix(String elem, int col, int row) {
	System.out.println(elem + "\t@ [" + col + "," + row + "] (col,row)");
	//setup column-size if neccessary (cells will be null)
	if (matrix.size() <= col)
		for (int i=matrix.size(); i<=col; i++)
			matrix.add(new ArrayList<List<String>>(col+1));
		
	//setup specified cell
	if (matrix.get(col).get(row) == null) { //hier kommt die Exception
		matrix.get(col).set(row, new ArrayList<String>(1));
				
	matrix.get(col).get(row).add(elem);
}//addToMatrix

Gibt es noch andere Datenstrukturen, mit sehr guter Zugriffszeit, welche in etwa mit obigem Code arbeiten lassen?! Also wenn eine Zelle null ist, dann leg ich eben ne neue Liste rein, sonst hänge ich etwas an die bestehende an.
 

Marco13

Top Contributor
Ich würde dir dringend empfehlen, diese Matrix in einem interface zu verstecken. Also z.B.
Code:
interface StringListMatrix
{
    List<String> get(int row, int col);
    ....
}
Oder ggf. generisch mit
Code:
interface Matrix<T>
{
    T get(int row, int col);
    ....
}

Dann kann man sich aussuchen, ob man das mit einem 1D-Array, einem 2D-Array, einem dreieckigen 2D-Array, einer List<List<List<String>>> oder einer Map<TwoInts, List<String>> speichert.

Ggf. kann man auch "bequeme" Methoden machen - z.B. könnte man eine Methode ins Interface packen wie
Code:
void add(int row, int col, String value)
die die "value" in Liste an der angegebenen Position legt - aber diese Liste auch automatisch erzeugt, falls sie noch "null" ist (und analog dazu, die Liste löscht, sobald sie leer wird). Aber das hängt stark vom Anwendungsfall ab.

Mit "dünn besetzen Matrizen" hantier' ich auch gerade rum - dabei geht es zwar um die Frage, wie man eine dünn besetzte 1000000x1000000-Matrix mit floats noch vernünftig im Speicher unterbringt (und ich gehe nicht davon aus, dass das mit den Strings in diesem Sinne speicherkritisch ist), aber deswegen hatte ich zufällig gerade Survey of Sparse Matrix Storage Formats offen - man sieht: Für solche Probleme haben sich die Leute schon ein paar Gedanken gemacht. Prinzipbedingt hat man oft den tradeoff zwischen speichereffizienter Verwaltung und einfacher Verwaltung. Implementiert ist das ganze natürlich auch schon, z.B. unter cern.colt.matrix (Colt 1.2.0 - API Specification) aber das wäre wohl ein Overkill.
 

diggaa1984

Top Contributor
was es net alles gibt :) ... wenn meine Abfragen auf dieser Matrix dann funktionieren dann werd ich das bestimmt mal ver-interfacen ^^ ... momentan muss ich erst noch prüfen ob diese neue (kompromierte) Matrix auch zum selben Ergebnis führt wie meine aufgeblähte ... sonst hab ich n problem :D

externe Libs werde ich vermeiden, aber dennoch danke für den tipp :)

meine matrizen haben im Schnitt 30-50 Spalten gross .. im Extremfall kann es aber schon passieren das die Nutzer der Software mal einfach ne Formel in Parser jagen, die aus vielen verknüpft ist und ma fix ein paar hundert Spalten in der Matrix erfordert ... daher muss ich zumindest in den Spalten massiv sparen.
Leere Spalten werden schon so gut wie möglich vermieden, sodass wirklich nur das nötigste in der Matrix erscheint.

Aber ich finds spannend den Standardalgorithmus derart umzubiegen das er extrem performanter wird als normal.

EDIT: worüber ich mir momentan noch Sorgen mache, ist die Tatsache, dass ich bei grossen Matrizen pro Spalte ein Hashtable habe. wenn das im worst-case n paar Hundert sind, weniger toll wa :D nur wie lösen ...
 
Zuletzt bearbeitet:

diggaa1984

Top Contributor
wow, solange mir mal nich der heap um die ohren knallt bei grossen matrizen, hab ich glaube den CYK-Algo grad voll gepimpt :D ... von standardmäßig 6200 effektiven Vergleichen (bei 6x6-Matrix und entsprechender Regelmenge der Grammatik) auf 35 effektive Vergleiche beschränkt .. man das fetzt ja urscht :D

musst ich ma loswerden :eek:
 
Zuletzt bearbeitet:

diggaa1984

Top Contributor
ich muss nochma was fragen, gibt es in Eclipse die Möglichkeit sich anzeigen zu lassen wieviel Speicherplatz denn eine bestimmte Datenstruktur/Variable zur Laufzeit belegt?!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E ArrayList Matrix sortieren Allgemeine Java-Themen 4
N lwjgl Projection Matrix löscht Dreieck Allgemeine Java-Themen 1
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
T Google Distance Matrix API Hello World/ Client Secret Allgemeine Java-Themen 3
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
R Multiplikation von Matrix und Vektor Allgemeine Java-Themen 5
P Matrix-Vektor Multiplikation Allgemeine Java-Themen 8
P Matrix erstellen Allgemeine Java-Themen 1
P Matrix-Vektor-Multiplikation Allgemeine Java-Themen 25
J Matrix Allgemeine Java-Themen 2
R Bibliothek für Darstellung von char auf 5x7 Dot-Matrix Allgemeine Java-Themen 2
K LED-Matrix oder andere "Hardware" für JavaProgrammierung Allgemeine Java-Themen 9
D Suche Matrix Libraries Allgemeine Java-Themen 11
P Matrix von Tastatur in 2D Array??? Allgemeine Java-Themen 7
P Matrix Kurtosis berechnen Allgemeine Java-Themen 40
D 8x8 Matrix mit Schachbrettbeschriftung Allgemeine Java-Themen 8
E Zufall in Matrix Allgemeine Java-Themen 10
S Algoritmus Distribution in einer Matrix Allgemeine Java-Themen 7
C Linie in Matrix machen Allgemeine Java-Themen 5
D Zweidimensionales Array als Matrix ausrpinten lassen Allgemeine Java-Themen 4
S Darstellung einer dynamischen Matrix Allgemeine Java-Themen 9
T Applikation für RGB LED Matrix Allgemeine Java-Themen 7
T DataFrame (Matrix mit mit verschiedenen Typen pro Spalte) Allgemeine Java-Themen 4
S Array Matrix erstellen? Allgemeine Java-Themen 9
RoliMG matrix diagonalen initialisieren Allgemeine Java-Themen 2
M HashMap kapselt zwei Objekte aber wie baut man eine Matrix? Allgemeine Java-Themen 2
B Entfernen von Zeilen/Spalten aus einer Matrix Allgemeine Java-Themen 8
J Matrix mit unterschiedlicher Anzahl von Spalten pro Zeile? Allgemeine Java-Themen 4
W Matrix potenzieren Allgemeine Java-Themen 4
M ArrayList oder LinkedList Allgemeine Java-Themen 10
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
R ArrayList Allgemeine Java-Themen 4
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
L ArrayList sortieren Allgemeine Java-Themen 2
C ArrayList Problem Allgemeine Java-Themen 3
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
S Best Practices CopyConstrutor mit ArrayList Allgemeine Java-Themen 1
S ArrayList Design Allgemeine Java-Themen 4
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
X Output von ArrayList Allgemeine Java-Themen 3
H Stream in ArrayList umwandeln Allgemeine Java-Themen 2
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
H Arraylist mit anderer ArrayList überschreiben Allgemeine Java-Themen 17
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
Curtis_MC Pointer mit ArrayList vergleichen Allgemeine Java-Themen 6
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
D ArrayList Indexlänge ändern Allgemeine Java-Themen 2
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
N Mehrdimensionale ArrayList mischen Allgemeine Java-Themen 10
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
MiMa Date aus einer ArrayList<Date> holen ?? Allgemeine Java-Themen 5
MiMa ArrayList Rückgabewerte aus einer Funktion Allgemeine Java-Themen 15
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H ArrayList: Leere Elemente finden? Allgemeine Java-Themen 2
GreenTeaYT Verständnisprobleme zur Arraylist Allgemeine Java-Themen 1
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
K ArrayList sortieren Allgemeine Java-Themen 16
A Bestimmte Inhalte aus ArrayList 1 in ArrayList 2 kopieren Allgemeine Java-Themen 6
S Mehrdimensionales ArrayList ins HashSet Allgemeine Java-Themen 10
C ArrayList Allgemeine Java-Themen 8
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
K Array in ArrayList Allgemeine Java-Themen 16
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
Paul15 Arraylist 2D Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
Neumi5694 Datentypen ArrayList vs TreeMap Allgemeine Java-Themen 6
F ArrayList Allgemeine Java-Themen 11
X ArrayList will nicht so wie ich will. Hilfe Allgemeine Java-Themen 8
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
Z Elemente einer ArrayList von rechts wegnehmen Allgemeine Java-Themen 5
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
R ArrayList und HashMap Allgemeine Java-Themen 7
T ArrayList zeilenumbruch entfernen Allgemeine Java-Themen 13
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
Doopy ArrayList plötzlich leer Allgemeine Java-Themen 2
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
L ArrayList Inhaltstyp. Allgemeine Java-Themen 5
Z Klassen ArrayList selbst machen Allgemeine Java-Themen 5
J Arraylist speichern und laden? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben