/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Equals og hash function
Fra : Maxi


Dato : 04-01-04 10:08

Det er en teoretisk spørgsmål. Når man laver sin egen equals funktion så
skal man også implementere dens hash funktion. Equals funktion til at
sammenligne om to objekter er ens. Hvad benytter man hash funktion til ?



 
 
Finn Nielsen (04-01-2004)
Kommentar
Fra : Finn Nielsen


Dato : 04-01-04 10:50

"Maxi" <dilorjaan50@hotmail.com> writes:

> Det er en teoretisk spørgsmål. Når man laver sin egen equals funktion så
> skal man også implementere dens hash funktion.

Hvis du skal putte dit objekt i et HashSet eller bruge det som nøgle i en
HashTable eller HashMap så ja.

> Equals funktion til at sammenligne om to objekter er ens. Hvad benytter
> man hash funktion til ?

Groft sagt så bruger HashTable, HashMap og HashSet bruger den til at
"indeksere" med. Hvis to objekter er ens ved sammenligning med equals()
så skal deres hashCode() returnere det samme tal, ellers kan du godt
glemme alt om at putte dem i et HashSet eller bruge dem som nøgle i
HashTable eller HashMap.

--
Finn Nielsen - http://www.finnnielsen.dk/

For email: Fjern den første og sidste del af domænet fra min adresse.

Michael Banzon (05-01-2004)
Kommentar
Fra : Michael Banzon


Dato : 05-01-04 04:48

"Finn Nielsen" <spamtrap2@zero.zznyyd.dk.invalid> skrev...
> Hvis to objekter er ens ved sammenligning med equals()
> så skal deres hashCode() returnere det samme tal, ellers kan du godt
> glemme alt om at putte dem i et HashSet eller bruge dem som nøgle i
> HashTable eller HashMap.

HØRT!

--
Michael Banzon
http://michael.banzon.dk/
http://southbound.dk/blog/



Mikkel Bundgaard (04-01-2004)
Kommentar
Fra : Mikkel Bundgaard


Dato : 04-01-04 11:11

On Sun, 04 Jan 2004 10:07:35 +0100, Maxi wrote:

> Det er en teoretisk spørgsmål. Når man laver sin egen equals funktion så
> skal man også implementere dens hash funktion.
Så vidt jeg husker, så er det ikke noget krav om, at du også implementerer
hash metoden. Men hvis du også ønsker, at implementere hash metoden,
så skal denne være konsistent med equals metoden, når objekterne er ens,
men den behøver ikke nødvendigvis at være det, når objekterne _ikke_ er ens.
Klippet et sted fra JavaDocen:
"
* 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.
"

> Equals funktion til at sammenligne om to objekter er ens. Hvad benytter
> man hash funktion til ?
hash-metoden bruges f.eks. af java.util.Hashtable ,java.util.HashMap
og andre datastrukturer, som bruger hash-metoden på det enkelte objekt til
at arrangere objekterne således, at man kan indsætte, slette, find .... de
enkelte objekter effektivt (ofte i konstant tid O(1)).

Men kig selv her, da det er _meget_ bedre forklaret, end hvad jeg kan gøre
på et par linjer, eller endnu bedre find en god introducerende bog om
algoritmer og datastrukturer, da hashtabeller med 98% sikkerhed vil være
forklaret der.
Hashtabeller generelt
http://www.cs.auc.dk/~normark/ps1-94-notes/hash.pdf
http://www.dat.ruc.dk/~henning/DatCE2003/Hashing.pdf
HashTables in Java
http://www.javaworld.com/javaqa/2002-06/01-qa-0621-hashtable.html

Håber du kan bruge det til noget
--
Mikkel Bundgaard
Ph.D. student at IT University of Copenhagen
http://www.itu.dk/people/mikkelbu/
Codito, Ergo Sum

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408192
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste