# ArrayList index auf gültigkeit prüfen



## DuffCola (14. Jan 2014)

Hallo,
wie der Titel schon sagt, wie kann ich einen Index prüfen, der in einer ArrayList vorhanden sein sollte?


----------



## Gucky (14. Jan 2014)

Meinst du, ob genug Indizes vorhanden sind? Index < arrayList.size()


----------



## DuffCola (14. Jan 2014)

Nein, ich meine wenn ich einen Index habe, der auf ein bestimmtes element in der Array Lsit zeigen SOLLTE, wie überprüfe ich ob der Index gültig ist ?
Muss ich einfach die Methode get aufrufen und eine eventuelle Out of Bounds exception auffangen oder gibt es eine schönere Lösung ?


----------



## Gucky (14. Jan 2014)

Ja die gibt es. Du guckst nach, ob der Index kleiner ist, als die Größe der Liste.  Ich verstehe dein Problem nicht.

Du hast eine Liste der Länge 3 und jetzt willst du gucken, ob der Index 5 gültig ist?


----------



## VfL_Freak (15. Jan 2014)

Moin,

ich fürchte eher, dass er Länge = 5 hat und Index 3 prüfen will 

@TO: erkläre mal, was Du hier genau unter Gültigkeit verstehst!

Gruß
Klaus


----------



## DuffCola (15. Jan 2014)

Also,
das problem ist, dass eine ArrayList, wenn man ein element löscht das Array intern nicht verkleinert wird.
So könnte man ausversehen auf ein element zugreifen, das schon vorher wieder gelöscht wurde.
Aber ich denke man kann es relative einfach überprüfen, indem man einfach den Rückgabewert der get funktion nach null überprüft.
Oder?


----------



## VfL_Freak (15. Jan 2014)

Moin,

bitte was  ???:L
Du löscht ein Element und kannst danach wieder drauf zugreifen ???:L

Erkläre doch mal genau was Du meinst!

Gruß
Klaus


----------



## Gucky (15. Jan 2014)

Ich glaube er weiß nicht genau, wie eine ArrayList funktioniert. Das Array hat eine bestimmte Größe. Wenn du ein Element hinzufügst, dann wird oben eins draufgepackt. Sind es zu viele Elemente wird das Array vergrößert.
Wenn du ein Element löschst, dann "rutschen" alle Elemente darüber einen nach unten. Es ist nicht so, dass der Platz dann einfach ausgespart wird und gefüllt wird, wenn wieder was dazukommt.
Die Gültigkeit eines Indexes kannst du also entweder unelegant mit einer Exception oder elegant mit der Größe der Liste prüfen.


----------



## Natac (16. Jan 2014)

Falls es dich stört, dass das Array (was die ArrayList für dich verwaltet) zu groß ist, bietet sich die Methode 
	
	
	
	





```
trimToSize()
```
 an.


----------



## DuffCola (16. Jan 2014)

Also, was ich eigentlich wollte ist folgendes.
Ich will Elemente ablegen, die immer den selben Index haben, dann will ich mithilfe des Indexes auf sie zugreifen, sprich das Objekt selbst bekommen oder das Element löschen.
Besonders wichtig ist, dass ich beim hinzufügen immer den Index bestimmen kann und, dass das hinzugefügte Element immer seinen hinzugefügten Index beibehält.
Wobei die Geschwindigkeit/Performance extrem wichtig ist.

Sorry, wenn ich mich hier irgendwie vertan habe, aber ich dachte eigentlich das ich das mit der ArrayList machen könnte?
Mir fällt gerade ein, das man doch eigentlich einen Map verwenden kann, jedoch wäre die längst nicht so schnell wie ein Array auf das man zugreifen könnte.
Insbesondere muss man schnell auf Elemente zugreifen.
Also brauche ich ein art vergrößerbares Array, dessen Elemente immer den selben beim hinzufügen angegeben Index beibehält.

Ich hoffe jemand versteht was ich meine und kennt vielleicht eine bestehende Klasse bzw. Collection.


----------



## Gucky (16. Jan 2014)

Wenn es nicht unbedingt generisch sein muss, kannst du dir auch schnell eine Liste selber zusammenzimmern. Das dürfte nicht allzu kompliziert sein. Es kostet aber auch nicht viel die Liste zu durchforsten und auf das richtige Element zu prüfen.


----------



## DuffCola (16. Jan 2014)

Ja das werde ich wohl machen müssen.
Aber es kommt besonders auf geschwindigkeit, aufgrund dessen das es sich um ein spiel handelt.
Danke.


----------



## Natac (21. Jan 2014)

Du kannst hierfür auch wunderbar eine ArrayList nehmen. Das Element zu "löschen" kann ja auch heißen, den enstsprechenden Index auf [c]null[/c] zu setzen. Dann musst du dir Arrayverwaltung nicht aufhalsen, die Indizes bleiben aber trotzdem konstant.

Und wenn ein Eintrag eben [c]null[/c] ist, dann weist du, dass er gelöscht wurde.


----------

