# Schnittstelle java.util.Set



## max_07 (30. Apr 2008)

Ich habe die Schnittstelle _java.util.Set_ mit der Schnittstelle _java.util.Collection_ vergliechen und festgestellt, dass in der Schnittstelle _java.util.Set_ keine neuen Methoden dazugekommen sind. Meine Frage ist: wieso hat man diese Schnittstelle überhaupt benötigt? Denn, das Verhindern von Dubletten in einem Set hätte man auch ohne die Schnittstelle _java.util.Set_ definieren zu müssen fertig bringen können. Handelt es sich um eine Design-Überlegung? Eine Trennung zwischen Listen und Mengen, indem man einen neuen Typ (Set) definiert?

Danke.


----------



## Wildcard (30. Apr 2008)

> Denn, das Verhindern von Dubletten in einem Set hätte man auch ohne die Schnittstelle java.util.Set definieren zu müssen fertig bringen können.


Und woher wüsstest du dann, ob du von Methode XY ein Set oder eine reguläre Collection bekommst?


----------



## maki (30. Apr 2008)

http://java.sun.com/docs/books/tutorial/collections/interfaces/index.html

Set ist eine Spezilisierung von Collection, das spezielle daran ist, dass eben kleine Dubletten erlaubt sind.
Gleiche Schnittstelle, anderes Verhalten, super Beispiel für sinnvolle Vererbung.


----------



## SlaterB (30. Apr 2008)

@Wildcard
gerade da ja ein ein Set nicht von einer Collection zu unterscheiden ist, wäre das egal,
man arbeitet entweder mit einem HashSet oder einer Collection

warum diese Unterscheidung doch wichtig ist ist ja gerade erst die Frage!,
und zwar hat das was mit dem vorgeschriebenen Verhalten zu tun,

eine Collection darf doppelte enthalten, ein Set nicht,
wer das Set-Interface implementiert kann streng genommen auch Doppelte aufnehmen, 
das Interface kann es nicht verhindern, macht also nix anders als Collection,
schreibt das aber dennoch vor, vergleiche die Documentation der Operationen wie z.B. add()


----------



## Wildcard (30. Apr 2008)

SlaterB hat gesagt.:
			
		

> @Wildcard
> gerade da ja ein ein Set nicht von einer Collection zu unterscheiden ist, wäre das egal,
> man arbeitet entweder mit einem HashSet oder einer Collection


Nein, es ist nicht egal. Das Interface ist mein Vertrag und wenn ich ein Set bekomme, kann ich einen Algorithmus schreiben, der sich darauf verlässt, das keine Duplikate existieren.


----------



## SlaterB (30. Apr 2008)

(edit: ach alles doppelt  schon gut )


----------



## Wildcard (30. Apr 2008)

hehe, eigentlich schreibst du ja genau das selbe.
Ich sollte mir angewöhnen fertig zu lesen bevor ich mich empöre


----------



## Guest (30. Apr 2008)

Stimmt es, dass in einer _Set_-Collection an sich einzig die Methode _add (E o)_ anders als bei einer _List_-Collection implementiert wird? Oder, hat es noch mehr Methoden, die anders implementiert werden?


----------



## SlaterB (30. Apr 2008)

diese Frage wirst du durch Lesen der API beantworten 

edit: ach halt, die Frage ist ja etwas anders,

dadurch, dass Elemente nicht doppelt vorkommen, kann man sie beispielsweise in einer Map ablegen
-> HashMap -> HashSet, ganz anders als alle Listen


----------



## maki (30. Apr 2008)

Anonymous hat gesagt.:
			
		

> Stimmt es, dass in einer _Set_-Collection an sich einzig die Methode _add (E o)_ anders als bei einer _List_-Collection implementiert wird? Oder, hat es noch mehr Methoden, die anders implementiert werden?


Das schöne ist doch, dass es vollkommen egal ist wie sie implementiert wird 

Falls du dich für die Details interessierst, sieh dir doch die Source an.


----------

