Tout d’abord, pour comprendre le rôle de hashCode, il faut d’abord connaître la collection en Java.
De manière générale, il existe deux types de collections en Java, l'une est List et l'autre est Set.
Connaissez-vous leur différence ? Les éléments du premier ensemble sont ordonnés et les éléments peuvent être répétés ; les éléments du second ensemble ne sont pas ordonnés, mais les éléments ne peuvent pas être répétés.
Voici donc un problème plus sérieux : si vous voulez vous assurer que des éléments ne sont pas répétés, sur quelle base devez-vous juger si deux éléments sont répétés ?
Il s'agit de la méthode Object.equals. Cependant, si vous vérifiez une fois à chaque fois qu'un élément est ajouté, alors lorsqu'il y a de nombreux éléments, le nombre de comparaisons entre les éléments ajoutés à la collection sera très important.
En d’autres termes, s’il y a maintenant 1 000 éléments dans la collection, lorsque le 1 001ème élément est ajouté à la collection, la méthode égale sera appelée 1 000 fois. Cela réduira évidemment considérablement l’efficacité.
Java adopte donc le principe de la table de hachage. Hash est en fait le nom d’une personne. Parce qu’il a proposé le concept d’algorithme de hachage, il porte son nom.
L'algorithme de hachage, également appelé algorithme de hachage, attribue directement des données à une adresse selon un algorithme spécifique. Si vous expliquez l'algorithme de hachage en détail, cela nécessitera plus de longueur d'article, je ne le présenterai donc pas ici.
Les débutants peuvent comprendre que la méthode hashCode renvoie en fait l'adresse physique du stockage d'objets (en réalité, ce n'est peut-être pas le cas).
De cette façon, lorsqu'un nouvel élément est ajouté à la collection, la méthode hashCode de cet élément est d'abord appelée et l'emplacement physique où il doit être placé peut être immédiatement localisé.
S'il n'y a aucun élément à cette position, il peut être stocké directement à cette position sans aucune comparaison s'il y a déjà un élément à cette position,
Appelez simplement sa méthode égale pour le comparer avec le nouvel élément. S'il est identique, il ne sera pas enregistré. S'il n'est pas identique, les autres adresses seront hachées.
Il y a donc là un problème de résolution des conflits. De cette façon, le nombre d’appels réels à la méthode equals est considérablement réduit, presque une ou deux fois seulement.
Par conséquent, Java fournit ceci pour la méthode eqauls et la méthode hashCode :
1. Si deux objets sont identiques, alors leurs valeurs hashCode doivent être les mêmes ; 2. Si les hashCode de deux objets sont identiques, ils ne sont pas nécessairement identiques. Les objets mentionnés ci-dessus étant identiques, cela fait référence à une comparaison utilisant. la méthode des équations.
Bien sûr, vous n'êtes pas obligé de le faire comme requis, mais vous constaterez que le même objet peut apparaître dans la collection Set. Dans le même temps, l’efficacité de l’ajout de nouveaux éléments sera considérablement réduite. La méthode hashcode est utilisée pour déterminer si deux objets sont égaux.
Alors vous diriez : n’existe-t-il pas une méthode appelée égale ? Oui, ces deux méthodes permettent de déterminer si deux objets sont égaux. Mais ils sont différents. De manière générale, la méthode equals est appelée par l'utilisateur. Si vous souhaitez déterminer si deux objets sont égaux,
Vous pouvez remplacer la méthode equals et l'appeler dans votre code pour déterminer si elles sont égales. En termes simples, la méthode égale est principalement utilisée pour déterminer si deux objets sont égaux en termes de surface ou de contenu. Par exemple, il y a une classe d'étudiants,
Les seuls attributs sont le nom et le genre, on peut donc penser que tant que le nom et le genre sont égaux, alors les deux objets sont égaux. La méthode hashcode n'est généralement pas appelée par les utilisateurs, par exemple dans hashmap, puisque la clé ne peut pas être répétée.
Lorsqu'il a jugé si la clé était répétée, il a jugé la méthode du hashcode et a également utilisé la méthode égale. Ce qui ne peut pas être répété ici signifie que tant que l'un des égaux et du hashcode n'est pas égal, tout ira bien ! Donc pour faire simple, hashcode équivaut à l'encodage d'un objet, tout comme md5 dans un fichier. Il est différent d'equals dans le sens où il renvoie un type int, ce qui n'est pas intuitif en comparaison. Nous écrasons généralement le hashcode lors du remplacement des égaux pour rendre leur logique cohérente. Par exemple,
Toujours en utilisant l'exemple de tout à l'heure, si le nom et le sexe sont égaux, même si les deux objets sont égaux, alors la méthode hashcode doit également renvoyer la valeur hashcode du nom plus la valeur hashcode du sexe, donc logiquement, ils sont cohérents. .
Pour déterminer physiquement si deux objets sont égaux, utilisez simplement ==