Comment redéfinir les méthodes equals() et hashCode() en Java

Les méthodes equals() et hashCode(). Ces deux méthodes sont définies dans la classe java.lang.Object. Nous utilisons la méthode equals() pour comparer si deux objets sont équivalents, ce qui signifie que les deux objets eux-mêmes (et non les références) sont égaux. Pour vérifier si les références d’objet sont égales ou non, nous utilisons l’opérateur == qui utilise la valeur du code de hachage de l’objet pour l’évaluer.
Différence entre equals() et ==Différence entre equals() et == en JavaIl y a une différence majeure entre l’opérateur == et la méthode equals(). L’opérateur == est un opérateur de comparaison particulièrement utile pour comparer des…Lire plus  
La méthode hashcode() est utilisé pour générer une valeur de code de hachage pour un objet et cette valeur de code de hachage est utilisée par certaines classes de collection pour comparer des objets, ce qui augmente les performances des grandes collections d’objets.

Définissons notre classe Student pour laquelle nous allons redéfinir les méthodes hashcode() et equals().

public class Student {
	
	private String name;
	private int age;
	
	public Student(){}
	
	public Student(String name, int age) {
		 this.age = age;
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
}
Différence entre Surcharge et RedéfinitionDifférence entre Surcharge et Redéfinition en JavaQuelle est la différence entre Surcharge et Redéfinition ? – la surcharge de fonctions est utilisée dans une seule classe où vous avez le même…Lire plus

 

Redéfinir la méthode HashCode

Voici l’exemple de code que nous avons ajouté à la classe Student pour redéfinir la méthode hashcode().

@Override
public int hashCode() {
	int result = 17;
	result = 31 * result + (name == null ? 0 :name.hashCode());
	result = 31 * result + age;
	return result;
}

L’utilisation de 31 comme hash est juste pour assurer que la valeur du hashcode sera différent pour chaque objet. Vous devez calculer le hachage pour différents membres et renvoyer le total sous forme de code de hachage unique.

 

Redéfinir la méthode equals

Voici l’exemple de code que nous avons ajouté à la classe Student pour redéfinir la méthode equals().

@Override
public boolean equals(Object obj){
	
	if(obj == null) return false;
	
	if(obj instanceof Student && this == obj) return true;
	
	Student student = (Student)obj;
	
	if(age != student.age) return false;

	if(name != null && !name.equalsIgnoreCase(student.name)) return false;

	return true;
}

Exécutez le code ci-dessous, pour vérifier la redéfinition des méthodes equals() et hashCode().

public class Test {
	public static void main(String [] args){
		
		Student student1 = new Student("Alex", 22);
		Student student2 = new Student("Alex", 23);
		
		System.out.println(student1.equals(student2)); // false
		
	}
}
QCM-JavaQCM Java – Programmation Orientée ObjetQCM sur Java avec des réponses pour la préparation des entretiens d’embauche, des tests en ligne, aux examens et aux certifications. Ces questions et réponses…Lire plus
Le contrat entre Hashcode et Equals :
  • Si deux objets sont égaux selon la méthode equals(), leurs code de hachage doivent être identiques.
  • Si deux objets ne sont pas égaux selon la méthode equals(), leur code de hachage peut être identique ou différent.

 

Partagez cet article

Une réflexion sur “Comment redéfinir les méthodes equals() et hashCode() en Java

  • Avatar
    avril 25, 2020 à 8:12
    Permalien

    Your page is very interesting, i have bookmarked it.

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *