Warum hat HashSet kein get(Object o) ?

Status
Nicht offen für weitere Antworten.

Biesterfeld

Aktives Mitglied
Hej Leute,

ich hoffe ihr fasst das nicht als Sinnlosposting ab, aber ich verzweifel grade und mir erschließt es sich auch einfach nicht:

Warum kennt java.util.HashSet die Methode get(Object o) nicht? Und wie umgeht ihr das?

Achso kurzer Hintergrund, ich habe für das entsprechende Object equals() und hashCode() überschrieben weil ich die Objekte bereits als identisch betrachte wenn nur bestimmte Kriterien erfüllt sind. Nun möchte ich also wenn ein Object, was u.U. zwar eine andere Instanz ist aber nach meinem Kriterium dennoch gleich zu einem Set-Eintrag, nicht zu dem Set addiert wissen, dann aber das Object welches bereits drin ist noch verändern:

Code:
if(! mySet.add(myObject)){
  ((MyObject)mySet.get(myObject)).increaseMultiplicity(); // HashSet.get() gibst nicht
}

So wie krisch ich das sinnvoll hin ohne jedes mal das Set mit nem dämlichen Iterator zu druchlaufen? Warum kennt jede verdammte andere Collection get() nur ausgerechnet HashSet nicht?

Dank euch ganz herzlich. Ich weiß ihr könnt mir helfen! Ohne euch hätt ich meine Studienarbeit eh schon längst hingeschmissen!

Beste grüße
Biesterfeld
 

Sky

Top Contributor
Also, so eine get-Methode macht nur sinn, wenn auch was dahinter steckt; z.B. mit get(KEY) bekomme ich einen VALUE. Nimm doch eine Hashmap oder eine Hashtable. Da kannste deinen KEY (verbunden mit einem VALUE) ganz gemütlich eintragen und hast sogar ne get(Object o)-Methode.
 

Biesterfeld

Aktives Mitglied
Hm,

ich dachte ich hätte es erklärt, aber hoffentlich habe ich da nicht was falsch verstanden.

Also: Wenn ich z.B. an HashSet contains(object) frage, dann überprüft es doch für alle Objekte obinhs ob obinhs.equals(object) ist, oder nicht? Zumindest dachte ich mir das so.

Solange equals nicht überschrieben ist, überprüft equals() doch auf Gleicheit der Instanz. Wenn ich nun aber equals dahingehend überschreibe dass es nur auf Gleicheit bestimmter Eigenschaften der Instanz überprüft, kann ein get() doch einen Sinn haben: Ich überprüfe ob das Objekt bereits in der Menge enthalten ist und wenn ja, möchte ich bitte die Referenz aus der Menge bearbeiten und nicht die Referenz die ich bereits auf Vorhandensein geprüft habe. Ich sehe da nicht wie mir eine HashMap wirklich sinnvoll helfen kann, klar kann ich die Objekte zu ihrem überschriebenen hahsCode mapen (oder viel mehr andersrum). Das Problem dabei ist nur dass mir das nicht wirklich hilft weil der hashCode auch nur ein erstes Indiz auf Identität ist und ich dann doch wieder mit equals() die Gleicheit prüfen muss.
Ich finds umständlich!

Naja habs jetzt so gelöst, dass ich mit einem Vector arbeite dem kann ich wenigstens mit contains(), indexOf() und get() genau so bearbeiten wie ich das möchte, nicht schön aber geht!

Dank euch dennoch und beste Grüße
Biesterfeld
 
B

bygones

Gast
sorry ich versteh immer noch nicht ganz was du willst.... aber über vector mit indexOf get contains ist immens umständlich... da kannste du gleich per iterator rüber gehen...

warum ?

contains ist intern eine indexOf abfrage, indexOf läuft über den Vector und vergleicht per equals. d.h. du läufst mit der contains abfrage, dann der indexOf abfrage 2x über den vector und machst dann einen indexbasierten zugriff....
 

Bleiglanz

Gesperrter Benutzer
eventuell hättest du auf einer Kopie retainAll mit deinem Objekt als Liste mit einem Element ausführen können, dann wäre nur das gesuchte übriggeblieben.

(es geht nicht anders, was du willst ist ja dasjenige ding in deinem Set zu finden, das equals(o) ist; dazu muss über die ganze Collection iteriert werden!)

nimm eine Map und mach put(x,x) :)

dann findet nämlich get() das Objekt, das equals zu deinem vorgegebenen ist...
 

Biesterfeld

Aktives Mitglied
Langsam werd ich äußerst unsicher, ob das so geht, wenn ihr schon nicht versteht was ich vorhabe...

Ich habe eine Klasse von der ich Instanzen erzeuge. Diese Instanzen sammel ich in einer Collection. So normalerweise überorüft doch ein nicht überschriebenes equals() auf Gleicheit der Instanz. Also wenn ich an ein Set contains(o) Frage habe ich bereits mit o genau die Instanz.

Soweit sogut. Nun überschreibe ich equals() dahingehend, dass zwei Instanzen auch dann gleich sind wenn nur einige Felder des Objektes gleich sind. Die idee war also nur nach diesen Kriterien eindeutige Objekte in ein Set aufzunehmen. Mit set.add(o) hätte ich mich also gar nicht weiter darum kümmern brauchen ob die gleich sind oder nicht.

So und nun die Erweiterung um die es mir geht: Wenn nun ein Objekt "doppelt" vorhanden ist soll es zwar nicht wieder in das Set aufgenommen werden, aber der doppelgänger der bereits in dem Set liegt soll verändert werden!

Ich machs jetzt nochmal ganz anders: Ich kehre zu dem HashSet zurück und laufe mit einem Iterator drüber der mir die Objekte erstmal mit equals prüft, ist das der Falls habe ich dan Doppelgänger direkt und kann ihn ändern, ansonsten wird das geprüfte objekt reingepackt.

Aber mein grundsätzliches Anliegen ist doch langsam klar geworden oder?
 
B

bygones

Gast
verstanden habe ich es glaub ich. Aber wie oben schon erwähnt, wenn du zugriff auf das objekt haben willst (direkt mein ich) geht das nur über die map !
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
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
F HashSet u. LinkedHashSet Zugriff auf Werte? Java Basics - Anfänger-Themen 2
F HashSet und LinkedHashSet Instanzierung warum so? Java Basics - Anfänger-Themen 7
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
H umwandeln zu Hashset ?! Java Basics - Anfänger-Themen 7
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
M intelliJ auf neuem PC, plötzlich kein Code Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
M Kein Shortcut? Java Basics - Anfänger-Themen 7
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
GermanPie Fehler in Putty (kein Hauptmanifestattribut, in jar) Java Basics - Anfänger-Themen 4
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
D kein hauptmanifestattribut in dateiname.jar Java Basics - Anfänger-Themen 14
X Methode bei mehrfachen Aufruf kein Effekt Java Basics - Anfänger-Themen 3
Z Warum kein Dreieck aus Sternen? Java Basics - Anfänger-Themen 9
T In C:\java\bin wird kein javac angezeigt. Java Basics - Anfänger-Themen 1
B Wieso gibt das Programm in der Console kein Ergebnis aus? Java Basics - Anfänger-Themen 2
N kein Sound beim Öffnen der jar-Datei, in Eclipse schon Java Basics - Anfänger-Themen 1
I Shutdown wenn kein Strom verfügbar Java Basics - Anfänger-Themen 4
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
X Best Practice SUCHE ein gutes Javabuch! (kein Anfang von 0) Java Basics - Anfänger-Themen 5
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
T Objektorientierte Programmierung - Kein Plan wieso das nicht funktioniert! Java Basics - Anfänger-Themen 6
B Compiler-Fehler 86:11: error: ';' expected obwohl kein ";" hingehört! Java Basics - Anfänger-Themen 10
T Compiler-Fehler Methode ist Abstrakt obwohl kein Schlüsselwort gesetzt wurde Java Basics - Anfänger-Themen 5
V Kann kein Java Projekt mehr mit Eclipse erstellen Java Basics - Anfänger-Themen 5
Joew0815 Methoden Objekt als Methoden-Parameter - Kein call-by-reference? Java Basics - Anfänger-Themen 12
J Warum kein new ? Java Basics - Anfänger-Themen 10
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
C Klassen Wieso kein infiniter Regress? Java Basics - Anfänger-Themen 4
N Kein Zugriff auf Ordner -> NullPointerException Java Basics - Anfänger-Themen 2
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
X Fehler beim Öffnen von Jar Datei: "kein Hauptmanifestattribut" Java Basics - Anfänger-Themen 5
D Classpath Kein Zugriff Java Basics - Anfänger-Themen 9
Xendarii Quicksort gibt kein Ergebnis aus Java Basics - Anfänger-Themen 13
K Warum ist ein Singleton kein Best Practise? Java Basics - Anfänger-Themen 3
J ResultSet.getStrin - doch kein String? oder wo liegt das Problem? Java Basics - Anfänger-Themen 3
Kenan89 JScrollPane, aber kein Scrollbalken Java Basics - Anfänger-Themen 4
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
M In Netbeans kein Problem, im Terminal schon Java Basics - Anfänger-Themen 3
E Kein Rechtzeitiger Abbruch bei Rekursiverfunktion Java Basics - Anfänger-Themen 8
C Stringeingabe: kein Satz wegen Leerzeichen möglich Java Basics - Anfänger-Themen 3
I Warum kein this in Methode Java Basics - Anfänger-Themen 17
V Kein neuer Thread trotz Runnable Java Basics - Anfänger-Themen 4
H Erste Schritte Kein Zugriff auf einen button der ein Ereignis ausgelöst hat Java Basics - Anfänger-Themen 2
M Kann kein Objekt (AudioFile in diesem Beispiel) für ein leeren String erzeugen Java Basics - Anfänger-Themen 3
K SWT Fehler obwohl kein SWT benutzt wird Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben