To nakonec odpovida i obecnemu pojeti hash code:
http://en.wikipedia.org/wiki/Hash_function
"A hash function may map two or more keys to the same hash value. In
many applications, it is desirable to minimize the occurrence of such
collisions, which means that the hash function must map the keys to
michal.niko...@elanor.cz napsal(a):
> Diky moc za uvedeny priklad. Vystupem u me je (Eclipse):
>
> 1580473: java.lang.obj...@42e816 - java.lang.obj...@42e816
> 1580473: (false) 4384790 - 4384790
>
> pricemz je pro me prekvapujici ten (false) ve vypisu. Vzdy jsem si myslel
> ze porovnani objektu
Diky moc za uvedeny priklad. Vystupem u me je (Eclipse):
1580473: java.lang.obj...@42e816 - java.lang.obj...@42e816
1580473: (false) 4384790 - 4384790
pricemz je pro me prekvapujici ten (false) ve vypisu. Vzdy jsem si myslel
ze porovnani objektu obj == clash je prave porovnani pres identityHashC
Tomáš Záluský napsal(a):
>> identityHashCode() vraci pro ruzne objekty ruzne hodnoty, ale pouze v
>> danem okamziku.
>
> To právě popírá program, který jsem linkoval v minulém mailu:
To je tím, že hashCode() vrací int, tedy může mít jenom 2^32 různých hodnot.
A už třeba jenom různých instancí ty
>identityHashCode() vraci pro ruzne objekty ruzne hodnoty, ale pouze v
>danem okamziku.
To právě popírá program, který jsem linkoval v minulém mailu:
public class HashClash {
public static void main(String[] args) {
final Object obj = new Object();
final int target = obj.h
identityHashCode() vraci pro ruzne objekty ruzne hodnoty, ale pouze v
danem okamziku. Pokud napr. vytvorim objekt, ulozim si jeho
identityHashCode(), pak jej zahodim a vytvorim novy objekt, tento novy
objekt muze mit stejny identityHashCode.
Dobry napad je pouziti referenci z java.lang.ref.
Z.T.
-
S tou unikátností identityHashCode to není tak samozřejmé, dokumentace k
System.identityHashCode() říká
"Returns the same hash code for the given object as would be returned by the
default method hashCode()"
a v dokumentaci k Object.hashCode() je na začátku odstavce šalamounská věta:
"As much as
Podle tohoto:
System.identityHashCode(), which is guaranteed to return distinct
integers for distinct objects within a JVM
by mela vracet pro kazdou instanci objektu jinou hodnotu. Takze by to
melo chodit, za predpokladu, ze porovnavate identicke objekty a ne
ekvivalentni (se stejnou hodnoto
A proc nepouzijete WeakReference nebo WeakHashMap?
Lukas
2010/6/29
> mam tridu (smyslena, oholena jen na reprezentaci problemu):
>
> public class Neco implements INekohoJineho {
> public String dejHodnotu(Object element){
>String hodnota = Tool.casoveNarocnaMetoda(element);
>
mam tridu (smyslena, oholena jen na reprezentaci problemu):
public class Neco implements INekohoJineho {
public String dejHodnotu(Object element){
String hodnota = Tool.casoveNarocnaMetoda(element);
return hodnota;
}
}
metoda dejHodnotu je volana v cyklu frameworku nade mnou a j
10 matches
Mail list logo