(Vielleicht ist jemand in Erklärlaune?)
Warum muss es mal ein Set und mal ein HashSet sein?
Gibt es einen grundsätzlichen Unterschied?
Set oder HashSet?
Gelöst
Kommentare (2)
- Beliebt
- Neu
- Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Thomas
7 August 2022, 13:10nützlich
Ein Set ist ein Interface das grob gesagt nur definiert welche Methoden eine Klasse, die dieses Interface implementiert, haben muss. Im Verhalten ist das Interface dann ein bisschen so wie eine Elternklasse. Du kannst eine Referenz einer Instanz einer Kindklasse in einem Elterntyp speichern. Also Set<Object> set = new HashSet<Object>(); Du kannst ein Interface selbst nicht instanziieren. Es hat ja (meist) keine implementierten Methoden.
Der Nachteil ist, dass eventulle zusätzliche Methoden der Kindklasse über den Elterntyp nicht ansprechbar sind. Hast du also eine TreeSet Instanz und eine Set Referenz darauf, dann kannst du nicht die speziellen Methoden des TreeSets verwenden wie first(), last(), lower() etc. Nur das, was in der Elternklasse (oder hier Interface) bekannt gemacht worden ist.
Der Vorteil ist jedoch, dass du einfach die Collection austaschen kannst. Bemerkst du irgendwann, dass ein HashSet dir nicht ausreicht, dann kannst du einfach
Set<Object> set = new HashSet<Object>();
ersetzen mit z.B.
Set<Object> set = new LinkedHashSet<Object>();
und alles funktioniert weiterhin ohne dass du sonst noch irgendetwas anpassen müsstest.
Zudem kannst du dir noch viel Arbeit sparen, wenn du Utilitymethoden schreibst, die Interfacetypen entgegennehmen wie z.B.
Das nimmt alle Arten von Sets entgegen und du musst nicht für jedes Set das es so gibt eine eigene Methode schreiben.
Wird alles später noch klarer ;) +2
claudia
8 August 2022, 09:00
Danke, Thomas, das war spitze!🤩
+1