Hm. Sich
präzise auszudrücken ist so eine Sache. :?
Mal der Reihe nach
ich möchte eine ungeordnete Liste
Was ein Widerspruch in sich ist.
(die dynamisch vergößerbar ist)
Bis hierhin gehe ich davon aus, dass du etwa sowas meinst wie
"Ich brauche eine Datenstruktur etwas, worin ich eine Menge von Objekten speichern kann. Die Reihenfolge der Objekte spielt keine Rolle (d.h. die Elemente können geordnet sein, aber es ist keine Anforderung)"
Falls dem so ist, würde bisher glaubich noch fast alles funktionieren, was eine Collection ist:
http://java.sun.com/docs/books/tutorial/collections/interfaces/collection.html
Weiter geht's
die ich iterativ durchlaufen kann
Ja, Collection tut's immernoch...
in der ich in O(1) einfügen und löschen kann
Aha - jetzt wird's interessant. Wenn du z.B. eine geordnete Menge hättest und (nur am Anfang) oder (nur am Ende) entfernen wolltest, würde es eine List tun
http://java.sun.com/docs/books/tutorial/collections/interfaces/list.html
Dazu muss ich noch auf die einzelnen Elemente referenzieren können.
Das klingt jetzt aber, als wolltest du NICHT ((nur am Anfang) oder (nur am Ende)) löschen, sondern auch mittendrin, Elemente deren Index du nicht kennst, und deren Index du auch nicht raussuchen willst. Dann käme eigentlich nur eine Set in Frage.
http://java.sun.com/docs/books/tutorial/collections/interfaces/set.html
Diese ist nichtmehr geordnet (außer bei einer TreeSet, wenn die ELemente Comparable sind oder ein Comparator angeboten wird)
Aber dann sowas
Ich dachte eigentlich zuerst, dass dafür eine ArrayList gut geeignet ist. Kann ich da auf die einzelnen Elemente per Referenz zugreifen? Falls ja, wie kriege ich den Index des zuletzt eingefügten Elements heraus? (Suchen erscheint mir zu teuer)
Wenn man ein Element hat, das in einer ArrayList liegt, und man kennt den Index nicht, dann kann man den index NUR durch Suchen herausfinden.
Bisher wäre die Antwort also gewesen:
Ein Set http://java.sun.com/docs/books/tutorial/collections/interfaces/set.html erfüllt deine Anforderungen.
Aber dann kommt im nächsten Beitrag
Also ich möchte per Index auf die Elemente zugreifen. deswegen dachte ich an eine ArrayList.
Jo, womit die Set wieder rausfliegt. :roll:
Weiter...
Ich habe also eine ArrayList...
das steht jetzt fest? ???:L
... in die ich Elemente einfügen möchte. Gleichzeitig habe ich mehrere Arrays in denen ich die Indizes dieser Elemente einfüge. D.h. ich möchte ein Element in die Arraylist einfügen und gleichzeitig seinen Index in ein anderes Array schreiben.
Allerdings habe ich keine ArrayList Methode gefunden mit der ich herausbekommen kann, welchen Index das Element hat welches ich gerade eingefügt habe.
Wenn du das Element mit "list.add(element)" einfügst, dann ist der Index des eingefügten Elementes gerade "list.size()-1". Wenn du das element mit "list.add(index,element)" einfügst, dann ist der Index des eingefügten Elementes gerade 'index'.
(Bis auf die methode IndexOf(Object), mit der ich nach meinem gerade eingefügten Element suchen könnte. was aber ganz sicher nicht in linearzeit passiert)
Linear schon, aber nicht konstant. Und das war ja mal irgendwann irgendwo aus irgendeinem Grund irgendeine Anforderung.
Ich hab gerade nochmal in der Java API nachgelesen...
:shock: Wie kommst du denn auf die verrückte Idee, in der API Doku nachzulesen, obwohl du erst so wenigen Leute so wenige Tage lang mit widersprüchlichen, wirren Fragen beschäftigt hast? Also, mach' die Doku zu. In der Doku steht nichts, was nicht auch hier im Forum beantwortet werden könnte. (jaja, Sarkasmus und so, sonst nimmst du das noch ernst.... :roll: )
...und gesehen, dass ArrayList wohl ungeeignet ist für mein Problem, da die remove(i) Operation einen index-shift nach sich zieht. Damit wäre dann auch mein Mapping im Eimer.
Ja, jetzt geht es auf einmal um ein "Mapping". Wie sich eine "Map" zu einer anderen "Collection" verhält, sieht man ja auf dem Bild auf dieser Seite:
http://java.sun.com/docs/books/tutorial/collections/interfaces/index.html - sie haben NICHTS miteinander zu tun!
Also.
Beschreib' nochmal, was du machen willst.
- Bemühe dich, keine falschen Aussagen zu machen
- Mache keine ungerechtfertigten Annahmen
- Versuche, nicht zu vergessen, spezielle Anforderungen an die gesuchte Datenstruktur zu nennen