HashSet und LinkedHashSet Instanzierung warum so?

Status
Nicht offen für weitere Antworten.

fsteinke

Mitglied
Hallo,

habe gerade ein super verständnisproblem beim nutzen von Set Collections.

Warum muss ich denn, zumindest sehe ich das hier nur, eine HashSet oder LinkedHashSet immer mit dem Set und nicht mit HashSet als Typ erzeugen?

Beispiel
Java:
Set<String> mset = new <String>HashSet();

Die Variante

Java:
HashSet<String> mset = new <String>HashSet();

funktioniert doch auch. Wo ist mein Denkfehler?

TreeSet wird doch auch
Java:
TreeSet<String> mset = new <String>TreeSet();
aufgerufen. ArrayList ja auch ?

Mir ist klar das das Interface Set implementiert ist und es geht also sozusagen ein Upper Cast aber warum ? Hab ich dann Nachteile?

Denke mal ich hab da was grundlegend nicht verstanden.


Danke für jeden Tip der mir Erleuchtung bringt.


Gruß Frederick
 
Zuletzt bearbeitet:
M

maki

Gast
Ein allgemeines Interface ist weniger spezifisch, weil man die Implementierung vernachlässigen/austauschen kann.
Deswegen macht man meist
Java:
List<String> myList = new ArrayList<String>();
 

Schandro

Top Contributor
Man sollte möglichst immer Objecte anhand ihrer interfaces referenzieren statt der konkrete Implementation. Wenn du irgendwann z.b. aus Performancegründen auf eine andere Implementation des interfaces umsteigen willst, brauchst du nur die Stelle zu ändern wo das Object erzeugt wird. Der komplette restliche Code funktioniert weiterhin ohne Compile-Probleme.

Außerdem können Methoden, die z.b. ein Set als Paramete erwarten, viel häufiger benutzt werden, als z.b. Methoden die ein HashSet erwarten. Es ist "allgemeingültiger".
 

fsteinke

Mitglied
Das war ja schnell.

Kannst Du mir das noch etwas konkreter erläutern. Ist mir nicht ganz klar wie Du das meinst mit ***Implementierung vernachlässigen/austauschen***

Gruß Frederick
 

fsteinke

Mitglied
Danke für die schnelle Info.

Glaube hab das verstanden.

Wenn ich z.B.

Java:
Set<String> mset = new <String>HashSet();

verwende könnte ich wenn mir meinetwegen die Performance oder was auch immer nicht passt einfach

Java:
Set<String> mset = new <String>LinkedHashSet();

schreiben. Meine Referenzvar mset die ja eventuell im weiteren SOurce an unterschiedlichste Methoden etc. übergeben wird ist dahingehend allgemein, dass meine Parameter in der Methode einen Typ Set erwarten und nicht allzu konkret z.B. einen HashSet

z.B.

Java:
void methode1(List param1)

u. nicht

Java:
void methode1(HashList param1)

Die Funktionalität der Collection selbst ist durch die Schreibweisen von

Java:
Set<String> mset = new <String>LinkedHashSet();

oder
Java:
HashSet<String> mset = new <String>LinkedHashSet();

aber nicht eingeschränkt oder?


Ist das so richtig?


Gruß Frederick.
 

Landei

Top Contributor
Ganz einfach: Wenn du von HashSet zu TreeSet oder irgendeinem anderen Set wechselst, deine Variable aber "nur" als Set definiert hast, bekommt der Rest des Programms von dem Wechsel nichts mit. Erwartet dein Programm dagegen überall "ganz konkret" ein HashSet, darfst du überall im Programm rumändern, um auf den neuen Typ zu wechseln.

Stell dir vor, in einem Laden müsstest du einen Scanner für EC-Karten installieren. Würdest du einen nehmen, der nur Commerzbank akzeptiert? Nö, das Ding sollte mit soviele Karten wie möglich arbeiten. Warum ist das so? Weil dir eigentlich völlig schnuppe ist, ob dein Kunde bei der Deutschen Bank oder bei der Sparkasse Bottrop ist, und genauso sollte es deinem restlichen Programm egal sein, was das nun "konkret" für ein Set ist.
 
Zuletzt bearbeitet:

Schandro

Top Contributor
Die Funktionalität der Collection selbst ist durch die Schreibweisen von
Java:
Set<String> mset = new <String>LinkedHashSet();
oder
Java:
HashSet<String> mset = new <String>LinkedHashSet();
aber nicht eingeschränkt oder?

Ist das so richtig?
Naja, du kannst halt auf die Variable mset NUR Methoden aufrufen die im Interface Set deklariert sind. Ansonsten machts von Programmablauf her keinerlei Unterschied, das Object ansich ist ja unabhängig davon wie es referenziert wird.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
F HashSet u. LinkedHashSet Zugriff auf Werte? Java Basics - Anfänger-Themen 2
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
volcanos HashSet und Iterator -> Falsche Sortierreihenfolge ? Java Basics - Anfänger-Themen 18
D Erste Schritte Code verstehen - HashSet Java Basics - Anfänger-Themen 8
J Hashset Java Basics - Anfänger-Themen 13
J HashSet Methode contains liefert false (hash Methode überschrieben) Java Basics - Anfänger-Themen 3
W Element aus HashSet in String umformen Java Basics - Anfänger-Themen 7
T HashSet in List-Object Java Basics - Anfänger-Themen 5
C Auf einzelne Werte aus HashSet zugreifen Java Basics - Anfänger-Themen 10
J Klassen HashSet, TreeSet: unregelmäßige Zahlenreihen beim Befüllen Java Basics - Anfänger-Themen 7
T Methoden HashSet Objekt mit Zufallszahlen befüllen Java Basics - Anfänger-Themen 3
J Verstehe meine HashSet Ausgabe nicht Java Basics - Anfänger-Themen 5
W Verknüpfung von Räumen mit Hashset Java Basics - Anfänger-Themen 10
J HashSet contain Methode funktioniert nicht wie gewollt Java Basics - Anfänger-Themen 7
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
R Hashset.add(Array) liefert immer true? Java Basics - Anfänger-Themen 23
Mrtwomoon Collections Hashset elemente ohne Eckigeklammer ausgeben Java Basics - Anfänger-Themen 9
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
A Elemente in HashSet enthalten oder nicht Java Basics - Anfänger-Themen 6
A HashSet (oder besser geignetes) Java Basics - Anfänger-Themen 14
T Hashset - Allgemeine Fragen Java Basics - Anfänger-Themen 19
J So ähnlich wie HashSet Java Basics - Anfänger-Themen 2
D HashSet vs Liste Java Basics - Anfänger-Themen 5
T HashSet Java Basics - Anfänger-Themen 3
F suche Elemente in HashSet Java Basics - Anfänger-Themen 5
E Collections HashSet - Ausgabe sortiert? Java Basics - Anfänger-Themen 3
J HashSet Fehlerhaft Java Basics - Anfänger-Themen 10
J HashSet Implementierung Java Basics - Anfänger-Themen 16
D Problem mit HashSet Java Basics - Anfänger-Themen 12
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
B Hashset iterieren problem Java Basics - Anfänger-Themen 3
C HashSet Problem Java Basics - Anfänger-Themen 3
DasBrot Datentypen HashSet contains() Java Basics - Anfänger-Themen 3
M HashSet.contains() Java Basics - Anfänger-Themen 2
N Map<String, HashSet<String>> Umwandeln in Map<String, ArrayList<String>> Java Basics - Anfänger-Themen 14
neurox Limit bei HashSet? Java Basics - Anfänger-Themen 2
Povlsen84 HashSet mit eigenen Datentypen Java Basics - Anfänger-Themen 6
G HashSet vs. TreeSet Java Basics - Anfänger-Themen 3
G hashset überschreibt werte bei add Java Basics - Anfänger-Themen 1
G Wie mach ich ein HashSet für eigene Objecte? Java Basics - Anfänger-Themen 9
M HashSet Initialisierungsgröße? Java Basics - Anfänger-Themen 5
F doppelte Elemente in HashSet Java Basics - Anfänger-Themen 5
G Probleme mit HashSet Java Basics - Anfänger-Themen 5
S HashSet in HashMap, Zugriff Java Basics - Anfänger-Themen 3
G Zahlen aus HashSet in ein int Array übergeben Java Basics - Anfänger-Themen 15
G Hashset verknüpfen mit BufferedReader Java Basics - Anfänger-Themen 18
L Was ist ein HashSet? Java Basics - Anfänger-Themen 33
G HashSet Java Basics - Anfänger-Themen 21
P HashSet und Referenzen Java Basics - Anfänger-Themen 9
B Warum hat HashSet kein get(Object o) ? Java Basics - Anfänger-Themen 8
H umwandeln zu Hashset ?! Java Basics - Anfänger-Themen 7
S LinkedHashSet Java Basics - Anfänger-Themen 8
G LinkedHashSet Java Basics - Anfänger-Themen 2
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
R OOP Instanzierung in verschiedenen Klassen Java Basics - Anfänger-Themen 8
J Referenz und Instanzierung Java Basics - Anfänger-Themen 25
C String Objekte Vergleich je nach Instanzierung unterschiedlich!!?!! Java Basics - Anfänger-Themen 4
B Zwei Unterschiedliche Klassen bei Instanzierung Java Basics - Anfänger-Themen 5
neurox Datentypen Instanzierung eines Gernerischen Objektes? Java Basics - Anfänger-Themen 10
Luk10 Sinn von Instanzierung ohne Referenz Java Basics - Anfänger-Themen 7
F Verständnisfrage Objekt instanzierung / Polymorphie Java Basics - Anfänger-Themen 10
G import vs. direkte Instanzierung Java Basics - Anfänger-Themen 2
H Probleme mit der Instanzierung eines Objektes Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben