Poeter.se logo icon
Redan medlem?   Logga in




 

kontraktet equals och hasCode

Det man behöver inse är att man ska tankemässigt utgå ifrån den matematiska definitionen av vad en "funktion är".
Då inser man att hashCode är en matematisk funktion.
Det innebär att två objekt som inte är distinkta aldrig kan ha olika hashCode.
dvs om x=y så måste f(x)=f(y) (matematiskt)
Det som distingerar objekt (eller matematiska element som tillhör mängder)
är equals metoden.

Dessutom har man att equals metoden måste vara mer fingranulerande (finkornig.. gör att fler element har olika funktionsvärden) än hashCode.
Annars bryter man mot kontraktet av rätt implementation av hashCode och equals.
För om man har en hashCode som är mer finkorning än samma objekts equals då kan ett och samma objekt ha olika hashCode värden.

Ett sätt att tänka är att rita upp ett diagram över objekt (eller ekvivalens klasser) på ena sidan som mappar mot boxar på andra sidan.
Två objekt hamnar i samma låda om de har samma hashCode.
Då blir det intuitivt självklart att ett och samma objekt ska hamna i endast en låda.

Man kan också se hashCode som en partitionering av objekten (enligt matematiska definitionen av "partitionering" är en partitionering samma sak som en ekvivalensklass indelning. En ekvivalensklass är symmetrisk, transitiv och reflexiv).

En hashCode som är mer fingranulerande än sitt objekts equals skapar en kvantum effekt.
Schrödingers katt som befinner sig i mer än ett tillstånd.
Runtime-opålitlighet. Indeterminism.




Fri vers av PolyMathWolverine
Läst 215 gånger
Publicerad 2011-08-13 18:24



Bookmark and Share

  > Nästa text
< Föregående

PolyMathWolverine
PolyMathWolverine