Unterschied Set, List und Map

Jeder Entwickler hat sie schon einmal verwendet Lists, Sets und Maps. Aber wo genau Unterscheiden sie sich und wann sollte ich was verwenden?

Kurzgesagt sind bei einer List die Elemente indexiert von 1-n. Bei Sets gibt es keine Ordnung weil jedes Element nur genau einmal vorkommen darf. Bei einer Map gibt es zu jeder Value einen einzigartigen Key.

Immer wenn ich mit mehreren Objekten der selben Klasse zu tun haben wird diese in eine Collection zusammengefasst.

Eine Collection zeigt eine Gruppe von Objekten die sogenannten Elemente.  Um zu entscheiden welche Art ich für meinen konkreten Fall verwenden sollte müssen folgende Fragen zuerst beantwortet werden:

Erlaube ich Mehrfacheinträge?

 Bei einer List Collection sind doppelte Einträge erlaubt. Es kann eine beliebige Anzahl von selben Objekten in die Liste hinzugefügt werden ohne die vorhandenen Werte und Keys zu beeinflussen. In einen Set ist es nicht erlaubt, dass das gleiche Objekt ein zweites Mal vorkommt. Bei einer Map darf die Value öfters vorkommen, solange der Key ein anderer ist.

Dürfen Listenelemente auch Null sein?

In einer List dürfen beliebig oft Null Werte vorkommen. Bei einem Set darf genau ein einziges Mal Null vorkommen. Bei einem Set darf der Key einmal Null sein , die Value darf beliebig oft Null sein.

Sind meine Elemente geordnet?

List und all ihre Unterarten behalten die eingefügte Ordnung. Set speichert die Objekte in keiner bestimmen Ordnung. Eine Map an und für sich auch nicht, jedoch gibt es spezielle Unterarten wie TreeMap welche die Objekte nach dem Key Wert sortiert.

Bekannte Unterklassen:

ArrayList Implementiert Listen-Funktionalität durch die Abbildung auf ein Feld; implementiert die Schnittstelle List.
LinkedList LinkedList ist eine doppelt verkettete Liste, also eine Liste von Einträgen mit einer Referenz auf den jeweiligen Nachfolger und Vorgänger. Das ist nützlich beim Einfügen und Löschen von Elementen an beliebigen Stellen innerhalb der Liste.
HashSet Eine Implementierung der Schnittstelle Set durch ein schnelles Hash-Verfahren.
TreeSet Implementierung von Set durch einen Baum, der alle Elemente sortiert hält.
LinkedHashSet Eine schnelle Mengen-Implementierung, die sich parallel auch die Reihenfolge der eingefügten Elemente merkt.
HashMap Implementiert einen assoziativen Speicher durch ein Hash-Verfahren.
TreeMap Exemplare dieser Klasse halten ihre Elemente in einem Binärbaum sortiert; implementiert NavigableMap.
LinkedHashMap Ein schneller Assoziativspeicher, der sich parallel auch die Reihenfolge der eingefügten Elemente merkt.
WeakHashMap Verwaltet Elemente mit schwachen Referenzen, sodass die Laufzeitumgebung bei Speicherknappheit Elemente entfernen kann.

Anwendungsgebiete

  • Wenn ein Eintrag nur einmal vorkommen darf empfiehlt es sich Sets zu verwenden
  • Wenn die List öfter dursucht wird, verwendet man Lists (ArrayList)
  • Wenn die Reihenfolge wichtig ist, ist List zu preferieren
  • Wenn die Datenbank ein Key Value Ordnung benötigt sind Maps die beste Wahl

 

Schreibe einen Kommentar