- ellenőrzi, hogy egy másik objektum egyenlő-e azzal az objektummal, amire ezt a metódust meghívtuk
- az alapértelmezett implementáció azt ellenőrzi, hogy két objektum referenciája azonos-e (x==y), ezt hívjuk sekély hasonlításnak (shallow comparison)
- azon osztályok, melyek felüldefiniálják ezt a metódust, mély hasonlítást (deep comparison) kell használniuk, azaz minden egyes releváns adatát össze kell hasonlítani az objektumnak
- reflexív
- szimmetrikus
- tranzitív
- konzisztens (ha két objektum egyenlő, akkor amíg nem módosulnak, egyenlőnek kell maradniuk)
- null összehasonlítás biztos (ha null az objektum, amivel összehasonlítjuk, mindig hamisat kell visszaadni)
- ha két objektum egyenlő, hashCode-juk is azonos kell legyen
public int hashCode()
- az adott objektum hash kódjának egész számú reprezentációját adja vissza
- a hash alapú collecition-ök (HashTable, HashMap stb.) használják
- minden osztály, ami az equals() metódust felüldefiniálja, a hashCode() metódust is felül kell, hogy definiálja
A hashCode() tulajdonságai:
- konzisztens
- ha két objektum egyenlő az equals() metódus szerint, hash kódjuk is azonos kell legyen
- ugyanazzal a hash kóddal rendelkező objektumok lehetnek különbözőek
Összefoglalás
Ami nagyon fontos, és el szokott siklani a figyelme sokaknak e felett:
Ha két objektum azonos (egyenlő), ugyanazt a hash kódot kell adniuk is, de fordítva ez nem igaz, azaz ha két objektum azonos hash kóddal rendelkezik, attól még nem biztos, hogy egyenlőek is.
Irodalom:
Java 1.5 API
Nincsenek megjegyzések:
Megjegyzés küldése