hashCode()
n'est généralement pas un bijection, car il ne s'agit généralement pas d'une carte injective.
hashCode()
a int
s comme sa gamme. Il n'y a que 2^32 valeurs distinctes int
, donc pour tout objet où il peut y avoir plus de 2^32 différentes (par exemple, pensez à Long
), vous êtes garanti (par le pigeonhole principle qu'au moins deux objets distincts auront le même code de hachage.
la seule garantie que hashCode()
vous donne est que si a.equals(b)
, puis a.hashCode() == b.hashCode()
. Chaque objet ayant le même code de hachage est conforme à ce sujet.
vous peut utiliser le hashCode()
pour identifier des objets dans certaines circonstances très limitées: Vous devez avoir une classe particulière dans laquelle il n'y a pas de e que 2^32 instances différentes possibles (c'est-à-dire, il y a au plus 2^32 objets de votre classe qui sont par paires tels que !a.equals(b)
). Dans ce cas, tant que vous vous assurez que lorsque !a.equals(b)
et a
et b
sont des objets de votre classe, que a.hashCode() != b.hashCode()
, vous aurez une bijection entre (classes d'équivalences) et les codes de hachage. (Cela peut être fait comme ceci pour la classe Integer
, par exemple.)
Cependant, à moins que vous ne soyez dans ce cas très spécial, vous devriez créer un identifiant unique d'une autre manière.
Vous pouvez utiliser le cryptage ou l'encodage/décodage (peut-être base64) pour cela. – jerjer