# Objekte oder besser ID in Listen speichern?



## Fats (29. Nov 2009)

Hallo zusammen!

Ist es ungeschickt, Objekte direkt in verschiedenen Listen zu speichern oder sollte man besser eine ID als Referenz ablegen?

Hintergrund 
Ich habe eine Menge von Objekten einer Klasse X erzeugt. Diese Objekte haben alle eine eindeutige ID vom Typ String. Ich muß nun verschiedene Untermengen aller Objekte bilden. Dabei kann ein Objekt auch in mehreren Untermengen enthalten sein. Diese Untermengen sind letztendlich Listen vom Typ ArrayList. Es gibt nun zwei Möglichkeiten diese Listen zu füllen:

1) mit den Objekten selbst. Dann wäre die ArrayListe auf die Klasse typisiert - also:

```
ArrayList <X> menge1 = new ArrayList<X>();
```

2) mit den IDs der Objekte. Dann würden in der Liste Strings gespeichert werden - also:

```
ArrayList <String> menge1 = new ArrayList<String>();
```

Fürs Handling ist s schöner, die Objekte direkt zu speichern, dann muß ich sie mir nicht anhand der ID erst zusammensuchen. Die Frage wäre, wie das vom Speicherverbrauch aussieht? Ich meine mal irgendwo gelesen zu haben, dass beim Speichern eines Objektes nur eine Art Link zum Objekt gespeichert wird. Somit dürfte der ja kaum Platz benötigen. Hab ich das richtig in Erinnerung?

Habt ihr dazu 'nen Tipp?
Viele Grüße
Fats


----------



## 0xdeadbeef (29. Nov 2009)

In einer ArrayList usw. kann man immer nur Objektreferenzen speichern. Auch ein String ist ein Objekt und selbst Basistypen wie int muß man in der Objektform Integer benutzen, um sie in einer Liste zu speichern. Das eigentliche Objekt ist dabei nie Bestandteil der Liste - die enthält halt immer nur die Referenz auf das Objekt. Es ist also für den Speicherverbrauch des Liste schnurz, ob Du darin Referenzen auf Integer, String oder irgendwelche anderen Objekte speicherst.

Du mußt dir nur immer darüber klar sein, daß (genau aus diesem Grund) das Einfügen des gleichen Objekts in mehrere ArrayLists das Objekt selber nicht vervielfacht. Falls Du das brauchen solltest (wonach es aber nicht klingt), mußt Du das Objekt per clone() o.ä. duplizieren. Aber auch da muß man wieder aufpassen, weil lediglich eine "flache" Kopie erzeugt wird, also im Objekt enthaltene Referenzen auf weitere Objekte nur kopiert werden, aber die entsprechenden Objekte selber nicht dupliziert.


----------



## Fats (29. Nov 2009)

Stimmt - String ist ja auch "nur" ein Objekt!  Nein, eine Kopie des Objektes wollte ich tatsächlich nicht haben, das hattest Du schon richtig verstanden. Prima, dann bin ich hier doch auf dem richtigen Weg 

Vielen Dank und viele Grüße!
Fats


----------

