2008. január 3., csütörtök

String.equals() lelkivilág...

Na jó, ez csak elmélet...

Egyszer valaki mondta, hogy a String.equals() végigellenőrzi az összes karaktert egyenként, persze csak ha ugyanolyan hosszúak. Nem hittem el, de végülis csak egy kattintás megnézni, tényleg ezt csinálja. Pedig milyen okos dolognak tűnik elöbb menézni a hashCode-t, ha az nem passzol, a string sem fog passzolni.
Viszont ha belegondol az ember alaposabban, nem olyan vészes dolog ez. Mióta Collections létezik, nem hasonlítgatunk össze nagy számú String objektumot, hanem a hash kódjuk alapján pillanat alatt megtaláljuk őket. Tényleges összehasonlítás nagyon kevés történik a Collection méretéhez képest.
Érdekes kérdés hogy ha a String.equals() használná a hashCode() metódust, akkor milyen típusú alkalmazások futnának gyorsabban, a hashCode() ugyanis bár cachelve van egy mezőben, a kiszámítása valamivel időigényesebbnek tűnik mint egy equals. Azaz rövid életű string objektumoknál valószinűleg nem térülne meg, így a java objektumfilozófiájával dolgozó alkalmazások talán valamit nyernek sebességben.
Talán mégsincs ez hülyén kitalálva, de biztosan más eredményeket adnának különböző alkalmazások.

OFF: El is felejtettem majdnem mondani hogy boldog BUÉKot kivánok mindenkinek, valamint egy éves az I Will Work For Food!