Set - addAll, removeAll..?

sirbender

Top Contributor
Hi,

bei HashSet - was wird da bei addAll gemacht? Wie wird entschieden ob ein Objekt schon drin ist? Ueber equals? Wenn ich dann mein eigenes equals fuer ein bestimmten Objekttyp ueberschreibe wird dieses zum Testen genutzt?
Oder ist es bei einem HashSet anderst weil eine HashMap dahintersteckt - wie werden die keys dieser Hashmap erzeugt?

Wie ist es bei einer List wie ArrayList? Wie wird da addAll und removeAll angewandt? Ueber equals?


Danke,
sb
 

Marco13

Top Contributor
Bei einer List bewirkt addAll, dass alle Elemente hinzugefügt werden (auch wenn schon welche drin sind, die equals zu den einzufügenden sind).

Bei einem Set sind alle Elemente nur einmal enthalten. D.h. wenn man Elemente einfügt, die zu schon vorhandenen Elementen equals sind, werden die neuen Elemente nicht eingefügt.

Und ja, wenn man equals überschreibt, wird das genutzt.

In bezug auf die HashMap sollte man noch erwähnen, dass zwingend die Bedingung
WENN a.equals(b)
DANN a.hashCode() == b.hashCode()
gilt. Wenn man also equals überschreibt, muss man auch hashCode so überschreiben, dass diese Bedingung sichergestellt ist. (Im Zweifelsfall könnte man einfach
Code:
int hashCode() { return 0; }
machen, aber dann wäre die HashSet mit diesen Objekten grottigst langsam.
 

nrg

Top Contributor
set != map. hier mal paar Grafiken zur Veranschaulichung:
(quelle: http://www.inabrenner.de/pdf/SCJP.pdf)
92931081.jpg

84798327.jpg
 

FArt

Top Contributor
bei HashSet - was wird da bei addAll gemacht? Wie wird entschieden ob ein Objekt schon drin ist? Ueber equals? Wenn ich dann mein eigenes equals fuer ein bestimmten Objekttyp ueberschreibe wird dieses zum Testen genutzt?
Oder ist es bei einem HashSet anderst weil eine HashMap dahintersteckt - wie werden die keys dieser Hashmap erzeugt?

Wie ist es bei einer List wie ArrayList? Wie wird da addAll und removeAll angewandt? Ueber equals?
@Sirbender
SUN liefert die Sourcen mit. Nur fünf Minuten, und du hättest das alles selber heraus finden können. Wenn du dann immer noch Fragen gehabt hättest (warum machen die das so oder so... habe ich richtig verstanden, dass....) wäre das Forum die richtige Adresse.

Ehrliche Frage, kein Flamen: ist das Hilflosigkeit, Faulheit? Ist das heutzutage einfach üblich? Bin ich zu altmodisch für diese Art der IT Welt?

Diese Fragen stelle ich mir in regelmäßigen Abständen...
 

sirbender

Top Contributor
@Sirbender
SUN liefert die Sourcen mit. Nur fünf Minuten, und du hättest das alles selber heraus finden können. Wenn du dann immer noch Fragen gehabt hättest (warum machen die das so oder so... habe ich richtig verstanden, dass....) wäre das Forum die richtige Adresse.

Ehrliche Frage, kein Flamen: ist das Hilflosigkeit, Faulheit? Ist das heutzutage einfach üblich? Bin ich zu altmodisch für diese Art der IT Welt?

Diese Fragen stelle ich mir in regelmäßigen Abständen...

Ja sehe ich ein. Aber ich hatte nur das JRE da ich an einem Leih-Laptop arbeite im Moment. Also JDK installiert. Das ging noch. Dann hab ich das JDK in den Preferenzen eingetragen. In Eclipse hat es mir dann immer noch nicht die Sourcen angezeigt. Nach langem rumprobieren merkte ich dann dass es wohl daran liegt dass beim Projekt immer noch die JRE Lib drin sind. Also entfernt und die JDK-Lib hinzugefuegt. Als ich auf ok drueckte - .project file nicht schreibbar. Man muss sagen das Project wird durch Git verwaltet und ich hatte eine Console (Windows) offen. Also Console zu, nochmal versuchen und nochmal und nochmal. .project war nicht schreibbar.

Also hab ich die Frage gestellt. Als ich zuhause war hab ich den Laptop nochmal hochgefahren und nochmal probiert. Jetzt war .project schreibbar. Ich weiss auch nicht was da los war.
 

Ähnliche Java Themen

Neue Themen


Oben