HashMap#get neues Objekt, selber Inhalt

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Tach,

hab momentan ein Problem mit einer HashMap:

Ich habe eine HashMap, welche als Key ein Objekt (TNTData, in dieser Klasse werden einfach zwei Werte gespeichert) und als Value einen boolean hat. Leider kann ich mir die Referenzen auf die eingefügten TNTData-Objekte nicht speichern, so dass ich für jede Get-Abfrage ein neues TNTData Objekt erzeugen muss. Dieses ist zwar genau identisch mit einem TNTData-Objekt, welches sich schon in der HashMap befindet, kann aber dort nicht gefunden werden.

Kann ich dieses Problem irgendwie umgehen bzw. warum tritt dieses Problem auf? Könnte es sein, dass ich ein bestimmtes Interface implementieren, oder evtl. eine Methode (z. B. equals) überschreiben muss, damit das funktioniert (ich weiß ja nicht wie eine HashMap nach einem Objekt sucht bzw. wie sie zwei vergleicht)?

Dankö!
 

The_S

Top Contributor
OK, danke schonmal :toll: . Das mit dem equals hab ich mir ja schon fast gedacht, aber hashCode ... kA wie soll ich das überschreiben? Klar, ich könnte aus den Werten irgendwelche Sachen errechnen, aber so wird der hashCode Schätzungsweise ja nicht berechnet!?
 

Wildcard

Top Contributor
Üblicherweise erfolg ein hash über die Attribute des Objekts. Wenn equals überschrieben wird, muss immer auch hashCode überschrieben werden um den contract zu erfüllen:
API hat gesagt.:
* Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
* If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.
* It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables.
Im Klartext: wenn obj1.equals(obj2) dann muss obj1.hashCode()==obj2.hashCode() sein.
Andersrum gilt das natürlich nicht.
 

The_S

Top Contributor
Das heißt im Klartext? Ich kann den HashCode so wie mir beliebt berechnen, er muss nur zwingend übereinstimmen wenn equals true zurück gibt!? Sollte equals nicht true zurück geben, kann der hashCode trotzdem übereinstimmen, muss aber nicht ...

Warum gibts dann überhaupt nen HashCode und nicht einfach nur equals?
 

Wildcard

Top Contributor
Der Sinn eines HashCodes ist es eine Große Menge an Objekten relativ eindeutig auf eine relativ kleine Menge an Werten abzubilden.
Ein übereinstimmender HashCode ist in den meisten Fällen eine ausreichende Prüfung auf Gleichheit, jedoch in den meisten Fällen wesentlich performanter.
Davon profitiert zum Beispiel die HashTable. Je mehr Kollisionen jedoch auftreten, desto langsamer wird die HashTable allerdings, daher sollte ein HashCode möglichst sinnvoll berechnet werden.
Immer 1 zurückzugeben, währe zwar theoretisch korrekt, macht den HashCode jedoch de facto unbrauchbar.
 

KSG9|sebastian

Top Contributor
du könntest z.B. die Länge von sämtlichen String-Attributen des Objekts zusammenzählen und zurückgeben. Wenn du nur 1 String hast isses evtl. bissl blöd :) Oder von jedem Zeichen den characater-code zusammenzählen und als int zurückgeben.
gibts ja genug möglichkeiten
 

The_S

Top Contributor
Ist mir auch zuerst eingefallen, aber dann ist mir aufgefallen, dass das recht ungünstig ist, da alle Strings immer gleich lang sind :autsch: . Hab mich jetzt dazu entschieden die ID eines "Teil-Objektes" zurückzugeben. Dürfte imho recht eindeutig sein.

Nochmal danke an euch beide :D !
 

Wildcard

Top Contributor
Da gibts nicht viel zu überlegen wie den HashCode berechnet:
Man errechnet ihn aus den Hashs aller bei equals verwendeten Attribute.
 

The_S

Top Contributor
KSG9|sebastian hat gesagt.:
Jop...das Beispiel weiter oben (der Link) ist klasse..kannste gut übernehmen

hui, wo ist der denn hergekommen??? Hab ich bis jetzt komplett übersehen :oops: . Werds mir daheim mal anschauen (und auch ein verspätetes "Danke" an byto ;) )
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
T HashMap values Bearbeitung Allgemeine Java-Themen 4
T Hashmap Values Bearbeitung Allgemeine Java-Themen 1
JavaJakob22 Bestimmte HashMap importieren Allgemeine Java-Themen 4
killig HashMap mit if-Anweisung überprüfen Allgemeine Java-Themen 4
killig Textdatei einlesen und in HashMap speichern (duplikate entfernen) Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
L HashMap Allgemeine Java-Themen 10
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
B HashMap Duplikate Allgemeine Java-Themen 4
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
F Tabelle aus CSV, 2 dimensionale HashMap? Allgemeine Java-Themen 4
D Mit Java PHP hashmap lesen Allgemeine Java-Themen 1
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
B HashMap aus Value Key bekommen Allgemeine Java-Themen 2
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
X JSONObject auslesen und in HashMap hinterlegen Allgemeine Java-Themen 16
N Werte aus Hashmap auslesen und übertragen Allgemeine Java-Themen 8
JavaWolf165 JsonObject in HashMap umwandeln Allgemeine Java-Themen 16
R ArrayList und HashMap Allgemeine Java-Themen 7
L Assoziatives Datenfeld, schneller wie Hashmap Allgemeine Java-Themen 35
G Methoden HashMap speichert unter falschen Schlüsseln Allgemeine Java-Themen 6
D Verschachtelte HashMap initializieren Allgemeine Java-Themen 1
L Variablen HashMap nimmt value nicht an Allgemeine Java-Themen 3
R Hierarchie mit HashMap darstellen Allgemeine Java-Themen 19
D Datentypen HashCollision in HashMap Allgemeine Java-Themen 3
Z Concurrent Modification Exception - HashMap (kein remove) Allgemeine Java-Themen 4
B Zugriff auf eine HashMap Allgemeine Java-Themen 4
B Userdaten in Hashmap speichern - Servlet Allgemeine Java-Themen 6
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
I HashMap key wird nicht erkannt trotz überschriebener equals/hashCode Methode Allgemeine Java-Themen 6
M Füllfaktor einer Hashmap Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
D Datentypen HashMap Allgemeine Java-Themen 5
R Collections Performance einer HashMap Allgemeine Java-Themen 26
C LinkedList und ArrayList in HashMap Allgemeine Java-Themen 4
T Erste Schritte HashMap<String, int> Allgemeine Java-Themen 2
K Hashmap sortieren Allgemeine Java-Themen 6
F HashMap überschreibt Daten von anderen HashMap Allgemeine Java-Themen 5
S HashMap containsKey liefert immer false zurück Allgemeine Java-Themen 15
H Problem beim Sortieren einer HashMap mit TreeSet Allgemeine Java-Themen 4
K HashMap sorting verhindern Allgemeine Java-Themen 10
J Generic von einer ArrayList/HashMap bekommen Allgemeine Java-Themen 7
L HashMap mit Enum Keys Allgemeine Java-Themen 3
J Array als Schlüssel für HashMap Allgemeine Java-Themen 6
S Geschwindigkeit HashMap oder .getParent Allgemeine Java-Themen 5
V Hashmap-Frage Allgemeine Java-Themen 3
M HashMap - Ich bin verwirrt Allgemeine Java-Themen 3
H2SO3- multiple Hashmap Allgemeine Java-Themen 5
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
J NullPointerException mit HashMap Allgemeine Java-Themen 2
V Probleme mit eigener Hashmap Allgemeine Java-Themen 10
N HashMap<String,Vector<String>> a = new HashMap<String,Vector<String>>(); Allgemeine Java-Themen 4
I HashMap Problem... Allgemeine Java-Themen 3
C HashMap Allgemeine Java-Themen 12
Daniel_L Map/HashMap - Reihenfolge von Einträgen Allgemeine Java-Themen 4
L HashMap Key Reihenfolge umkehren Allgemeine Java-Themen 8
N wie greife ich auf hashmap in vector zu Allgemeine Java-Themen 9
J Inhalt von HashMap vergleichen Allgemeine Java-Themen 3
Z Serialisierung und Deserialisierung einer HashMap Allgemeine Java-Themen 17
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
T Hashmap füllen mit rs sortierung Allgemeine Java-Themen 9
D HashMap sortieren Allgemeine Java-Themen 2
P Große Datenmenge wie speichern (HashMap? TreeMap?) Allgemeine Java-Themen 11
D HashMap Problem Allgemeine Java-Themen 14
G Runnables aus Hashmap starten Allgemeine Java-Themen 4
J java.util.ConcurrentModificationException bei HashMap? Allgemeine Java-Themen 2
G HashMap key ändern Allgemeine Java-Themen 5
L HashMap / Objekte auf Festplatte zur Laufzeit auf HD swappen Allgemeine Java-Themen 7
S Problem mit Hashmap Allgemeine Java-Themen 2
G Datei einlesen und in HashMap verarbeiten Allgemeine Java-Themen 3
E Auslesen aus Hashmap Allgemeine Java-Themen 3
P HashMap mit mehreren gleichen keys Allgemeine Java-Themen 4
alexpetri hashmap bästpractice Allgemeine Java-Themen 4
J HashMap mit Webservice realisierbar? Allgemeine Java-Themen 4
ARadauer hashmap vs hastable Allgemeine Java-Themen 5
T HashMap#values Reihenfolge Allgemeine Java-Themen 13
M ArrayList sortieren - HashMap mit sort_id vorhanden Allgemeine Java-Themen 2
L Wie kann ich eine HashMap abspeichern? Allgemeine Java-Themen 3
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
M HashMap kapselt zwei Objekte aber wie baut man eine Matrix? Allgemeine Java-Themen 2
E MySQL-Datenbank <-> HashMap/TreeMap Allgemeine Java-Themen 1
P List in Hashmap schreiben Allgemeine Java-Themen 5
M Threads in einer Hashmap Allgemeine Java-Themen 5
P HashMap an 2 Stellen veränderbar Allgemeine Java-Themen 13
P HashMap auflösen Allgemeine Java-Themen 9
MQue HashMap durchlaufen Allgemeine Java-Themen 2
MQue HashMap Allgemeine Java-Themen 2
M HashMap kommt beim Löschen aus dem Tritt Allgemeine Java-Themen 6
MQue HashMap Allgemeine Java-Themen 6
MQue HashMap Allgemeine Java-Themen 9
MQue Sichtbarkeit/HashMap/NullPointerexception Allgemeine Java-Themen 2
B HashMap.containsKey. Allgemeine Java-Themen 10
J byte-Array in Hashmap speichern? Allgemeine Java-Themen 3
S Klasse in HashMap speichern Allgemeine Java-Themen 3
G [quote]the type HashMap is not generic; it cannot be paramet Allgemeine Java-Themen 4
M HashMap sortiert Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben