Hallo zusammen,
ich bastel mir gerade eine kleine graphische Anwendung, und suche dazu eine relativ spezielle Datenstruktur..
Am besten beschreibe ich einfach mal schnell das Szenario:
Grundlage ist die (natürliche) Gitter-Ebene N^2. Per Mausklick/-drag erstellt der Benutzer Rechtecke in N^2 (Wer es jetzt schon vermutet hat: Genau, es geht um Pixel, .awt , .swing - aber das ist nur nebensächlich für meine gleich folgende Frage), oder - falls er auf ein schon existierendes Rechteck geklickt hat - verschiebt das gewählte Rechteck.
die Rechtecke sind simpel strukturiert, z.B.
Nun mein Problem: Alle erstellten Rechtecke müssen gespeichert werden, und zwar sortiert nach x-Koordinate (X_UpperLeft). Ich brauche also eine dynamische, Integer-geordnete Datenstruktur, die relativ schnell ist, wenn es darum geht
(i) ein neues Element an einer beliebigen Stelle der Ordnung einzufügen (wenn man ein neues Rechteck erstellt) ...löschen sollte am besten auch gleich dabei sein.
(ii) zwei in der Ordnung nebeneinander stehende Elemente zu vertauschen (wenn man ein Rechteck verschiebt)
(iii) die gesamte Anzahl der momentan gespeicherten Elemente zu nennen
Anmerkung zu (i): Es muss nicht unbedingt ein O(log n) - Einfügen/Löschen sein, die Anzahl der Rechtecke sollte (anwendungsbedingt) nie über 40 liegen.
In C würde ich mir einfach schnell etwas auf Pointer-Listen-Basis basteln, aber das geht in Java ja nicht. Ich tendiere schon in Richtung Arraylist oder LinkedList, habe mir dazu aber noch nicht genug durchgelesen und bin nicht sicher, ob die Strukturen schnell genug sind (die Datenstruktur muss letztlich bei jedem MouseEvent aktualisiert werden, und dann kommen noch einige weitere Rechnungen hinzu), oder ob es in Java nicht vielleicht eine bessere Struktur für die genannten Anforderungen gibt.
Und das ist meine Frage.. auch wenn da jetzt kein Fragezeichen drin vorkam.
mfg und danke im voraus.
ich bastel mir gerade eine kleine graphische Anwendung, und suche dazu eine relativ spezielle Datenstruktur..
Am besten beschreibe ich einfach mal schnell das Szenario:
Grundlage ist die (natürliche) Gitter-Ebene N^2. Per Mausklick/-drag erstellt der Benutzer Rechtecke in N^2 (Wer es jetzt schon vermutet hat: Genau, es geht um Pixel, .awt , .swing - aber das ist nur nebensächlich für meine gleich folgende Frage), oder - falls er auf ein schon existierendes Rechteck geklickt hat - verschiebt das gewählte Rechteck.
die Rechtecke sind simpel strukturiert, z.B.
Java:
class Rect(){
int X_UpperLeft;
int Y_UpperLeft;
int height;
int width;
}
Nun mein Problem: Alle erstellten Rechtecke müssen gespeichert werden, und zwar sortiert nach x-Koordinate (X_UpperLeft). Ich brauche also eine dynamische, Integer-geordnete Datenstruktur, die relativ schnell ist, wenn es darum geht
(i) ein neues Element an einer beliebigen Stelle der Ordnung einzufügen (wenn man ein neues Rechteck erstellt) ...löschen sollte am besten auch gleich dabei sein.
(ii) zwei in der Ordnung nebeneinander stehende Elemente zu vertauschen (wenn man ein Rechteck verschiebt)
(iii) die gesamte Anzahl der momentan gespeicherten Elemente zu nennen
Anmerkung zu (i): Es muss nicht unbedingt ein O(log n) - Einfügen/Löschen sein, die Anzahl der Rechtecke sollte (anwendungsbedingt) nie über 40 liegen.
In C würde ich mir einfach schnell etwas auf Pointer-Listen-Basis basteln, aber das geht in Java ja nicht. Ich tendiere schon in Richtung Arraylist oder LinkedList, habe mir dazu aber noch nicht genug durchgelesen und bin nicht sicher, ob die Strukturen schnell genug sind (die Datenstruktur muss letztlich bei jedem MouseEvent aktualisiert werden, und dann kommen noch einige weitere Rechnungen hinzu), oder ob es in Java nicht vielleicht eine bessere Struktur für die genannten Anforderungen gibt.
Und das ist meine Frage.. auch wenn da jetzt kein Fragezeichen drin vorkam.
mfg und danke im voraus.