logo

Comment comparer deux objets en Java

Objet Java class est la super classe de toutes les classes Java. Toutes les classes Java implémentent la classe Object par défaut. La classe Java Object fournit les deux méthodes importantes pour comparer deux objets en Java , c'est à dire. équivaut à() et code de hachage() méthode. Dans cette section, nous apprendrons comment équivaut à() et code de hachage() la méthode fonctionne. Parallèlement à cela, nous apprendrons également comment comparer deux objets en Java avec des exemples appropriés.

Java fournit les deux méthodes de la classe Object pour comparer les objets :

  • Méthode Java égale()
  • Méthode Java hashCode()

Méthode Java égale()

Le équivaut à() La méthode de la classe Object compare l’égalité de deux objets. Les deux objets seront égaux s’ils partagent la même adresse mémoire.

Syntaxe:

 public boolean equals(Object obj) 

La méthode analyse un objet de référence en tant que paramètre. Il renvoie vrai si les objets sont égaux, sinon renvoie faux.

Il est également possible qu'un objet soit égal à un autre objet donné, alors la méthode equals() suit la relation d'équivalence pour comparer les objets.

chaîne java cmp
    Réfléchi:Si X est une référence non nulle, l'appel de x.égal(x) doit retourner vrai.Symétrique:Si les deux références non nulles sont X et y, x.égal(y) reviendra vrai si et seulement si y.égal(x) retour vrai .Transitif:Si les trois références non nulles sont x,y , et z, x.égal à (z) reviendra également vrai si x.égal(y ) et y.égal(z) les deux retours vrai .Cohérent:Si les deux références non nulles sont X et et , l'appel multiple de x.égal(y) renvoie constamment vrai ou faux. Il ne fournit aucune information utilisée dans la comparaison.
  • Pour toute référence non nulle x, x.equals(nul) renvoie faux.

En bref, pour toute référence non nulle, disons X et et , il renvoie vrai si et seulement si les deux références font référence au même objet.

Souviens-toi: Lorsque nous remplaçons la méthode equals(), il est nécessaire de remplacer la méthode hashCode(). Le remplacement suit la convention de la méthode hashCode() qui stipule que l'objet égal doit avoir un code de hachage égal.

Exemple de méthode equals()

Dans l'exemple suivant, nous avons créé constructeur de la Double et Long classe et transmet les valeurs correspondantes, comme argument stocké dans leurs objets, respectivement.

Après cela, dans la première instruction println, nous avons invoqué la méthode equals() et analysons un objet y en tant que paramètre qui compare les objets x et y. Il revient FAUX parce que x contient la valeur double et y contient la valeur longue qui n'est pas égale.

De même, dans la deuxième instruction println, nous avons invoqué la méthode equals() et analysons la même valeur que dans le constructeur de la classe Double. Il revient vrai parce que l'objet de classe double, c'est-à-dire x, contient la même valeur que celle que nous avons transmise dans la méthode equals().

contient la sous-chaîne java

ObjectComparisonExample.java

 public class ObjectComparisonExample { public static void main(String[] args) { //creating constructor of the Double class Double x = new Double(123.45555); //creating constructor of the Long class Long y = new Long(9887544); //invoking the equals() method System.out.println('Objects are not equal, hence it returns ' + x.equals(y)); System.out.println('Objects are equal, hence it returns ' + x.equals(123.45555)); } } 

Sortir:

exemples de nfa
 Objects are not equal, hence it returns false Objects are equal, hence it returns true 

Différence entre l'opérateur == et la méthode equals()

Dans Java , le == L'opérateur compare si deux références sont identiques ou non. Tandis que le équivaut à() La méthode compare deux objets.

Les objets sont égal quand ils ont le même état (généralement en comparant des variables). Les objets sont identique lorsqu'ils partagent l'identité de classe.

Par exemple, l'expression obj1==obj2 teste l’identité, pas l’égalité. Tandis que l'expression obj1.equals(obj2) compare l’égalité.

Méthode Java hashCode()

En Java, le code de hachage est une valeur entière signée de 32 bits. Il s'agit d'un identifiant unique fourni par JVM à un objet Java. Chaque objet Java est associé au code de hachage. Le code de hachage est géré par une structure de données basée sur le hachage, telle que HashTable, HashSet, etc.

Souviens-toi: Lorsque nous remplaçons la méthode equals(), il est également nécessaire de remplacer la méthode hashCode().

Syntaxe:

produit scalaire numpy
 public int hashCode() 

Il renvoie une valeur de code de hachage générée aléatoirement de l'objet, unique pour chaque instance. La valeur générée aléatoirement peut changer au cours des différentes exécutions du programme.

Le contrat général de hashCode est :

  • Lorsqu'elle est invoquée plus d'une fois lors de l'exécution d'une application, la méthode hashCode() renverra systématiquement le même code de hachage (valeur entière). Notez que l'objet ne doit pas être modifié.
  • Si les deux objets sont égaux selon la méthode equals(), alors l'invocation de la méthode hashCode() sur ces deux objets doit produire la même valeur entière.
  • Il n'est pas nécessaire que si les deux objets sont inégaux selon la méthode equals(), alors l'invocation de la méthode hashCode() sur ces deux objets puisse produire une valeur entière distincte. Cela signifie qu'il peut produire le même code de hachage pour les deux objets.

Exemple de méthode hashCode()

Dans l'exemple suivant, nous avons créé deux classes Employé.java et HashCodeExample.java .

Dans la classe Employee, nous avons défini deux champs regno de type int et name de type String. Après cela, nous avons créé un constructeur de la classe Employee et passons ces deux champs en paramètre.

Pour effectuer la comparaison d'objets, nous avons créé une classe distincte nommée Exemple de code de hachage . Dans cette classe, nous avons créé deux instances de la classe Employee, à savoir. emp1 et emp2 . Après cela, nous avons invoqué la méthode hashCode() à l’aide d’objets. Nous avons stocké la valeur du code de hachage dans la variable un et b , respectivement.

Employé.java

 public class Employee { private int regno; private String name; //constructor of Employee class public Employee(int regno, String name) { this.name = name; this.regno = regno; } public int getRegno() { return regno; } public void setRegno(int Regno) { this.regno = regno; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

HashCodeExample.java

 public class HashcodeExample { public static void main(String[] args) { //creating two instances of the Employee class Employee emp1 = new Employee(918, 'Maria'); Employee emp2 = new Employee(918, 'Maria'); //invoking hashCode() method int a=emp1.hashCode(); int b=emp2.hashCode(); System.out.println('hashcode of emp1 = ' + a); System.out.println('hashcode of emp2 = ' + b); System.out.println('Comparing objects emp1 and emp2 = ' + emp1.equals(emp2)); } } 

Sortir:

algorithmes de recherche
 hashcode of emp1 = 2398801145 hashcode of emp2 = 1852349007 Comparing objects emp1 and emp2 = false 

Remplacement de la méthode equals()

Nous pouvons remplacer la méthode equals() de la manière suivante si nous souhaitons fournir notre propre implémentation.

 //overriding equals() method @Override public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; return this.getRegno() == ((Employee) obj). getRegno(); } 

L'extrait de code ci-dessus montre que deux employés seront égaux s'ils sont stockés dans la même adresse mémoire ou s'ils ont le même statut. Lorsque nous exécutons le programme (HashCodeExample.java) avec l'extrait de code ci-dessus, nous obtenons le résultat suivant.

Sortir:

 hashcode of emp1 = 2032578917 hashcode of emp2 = 1531485190 Comparing objects emp1 and emp2 = true