[*]Die verkettete Liste ist aber deutlich im Vorteil, wenn Elemente mitten in der Liste gelöscht oder eingefügt werden; hier muss einfach nur die Verkettung der Hilfsobjekte an einer Stelle verändert werden. Bei einer ArrayList bedeutet dies viel Arbeit, es sei denn, das Element kann am Ende gelöscht oder – bei ausreichender Puffergröße – eingefügt werden. Soll ein Element nicht am Ende eingefügt oder gelöscht werden, müssen alle nachfolgenden Listenelemente verschoben werden.
Das wird zwar oft behauptet, ist aber falsch– oder, genauer gesagt, man muß hier differenzieren: Das eigentliche Einfügen ist schneller, aber um überhaupt erst einmal zur Mitte zu gelangen, müssen die Elemente bis dahin durchlaufen werden, und das kostet Zeit, so daß der komplette Vorgang recht lange dauert. ArrayList ist in der Regel auch hierbei schneller.
Interessant wird es hingegen, wenn häufig am Anfang Elemente eingefügt werden. Eventuell gibt es auch noch Unterschiede bei der Speicherplatzbelegung und der ‐fragmentierung, da für ArrayList ein großes Feld benötigt wird. Um das beurteilen zu können, fehlt mir aber das Wissen über die Interna der VM.
@DennisXX:
> Ok danke. Und wie genau verhält sich eine Hashmap oder
> allgemein eine Map? Was genau hat diese für Vor- und Nachteile?
Map ist eine Schnittstelle, HashMap eine implementierende Klasse; von Map kann man keine Objekte erzeugen, von HashMap schon.
Falls Du Dich nun fragst, wofür die Schnittstelle dient: Sie ist eine Art Vorlage, die angibt, über welche Methoden Maps anbieten müssen. Es gibt auch eine Schnittstelle
List, die von ArrayList und LinkedList implementiert wird. Deswegen haben beide Methoden zum Einfügen und Löschen von Elementen, die die gleichen Siganturen haben (gleichen Namen und gleiche Parameter), so daß sie austauschbar sind. Lediglich die Interna, wie die Daten verwaltet werden, unterscheiden sich.