Introduction
Ce laboratoire abordera l'utilisation de la méthode hashCode(int n)
de la classe Integer
de Java. Nous allons apprendre à générer une valeur entière unique, appelée code de hachage, pour une valeur entière donnée.
💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici
Ce laboratoire abordera l'utilisation de la méthode hashCode(int n)
de la classe Integer
de Java. Nous allons apprendre à générer une valeur entière unique, appelée code de hachage, pour une valeur entière donnée.
Créez un fichier nommé IntegerHashcode.java
dans le répertoire ~/project
et ouvrez-le dans votre éditeur de texte favori.
touch ~/project/IntegerHashcode.java
touch ~/project/IntegerHashcode.java
Importez la classe Integer
du package java.lang
.
import java.lang.Integer;
Dans cette étape, nous allons générer des codes de hachage pour des valeurs entières à l'aide de la méthode hashCode(int n)
. Nous allons créer une application qui invite l'utilisateur à entrer une valeur entière et génère ensuite la valeur de code de hachage pour l'entier entré.
import java.lang.Integer;
import java.util.Scanner;
public class IntegerHashcode {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Entrez une valeur entière : ");
int value = sc.nextInt();
int hashValue = Integer.hashCode(value);
System.out.println("La valeur de code de hachage pour " + value + " est " + hashValue);
}
}
Dans le code ci-dessus, nous avons importé la classe Scanner
du package java.util
pour l'entrée. Nous invitons l'utilisateur à entrer une valeur entière et la lisons à l'aide de la méthode nextInt()
de la classe Scanner
. Nous générons ensuite la valeur de code de hachage pour l'entier entré à l'aide de la méthode hashCode(int n)
et l'affichons sur la console à l'aide de la méthode println()
.
Enregistrez et fermez le fichier. Compilez le fichier IntegerHashcode.java
à l'aide de la commande ci-dessous.
javac IntegerHashcode.java
Exécutez le programme à l'aide de la commande ci-dessous.
java IntegerHashcode
Vous serez invité à entrer une valeur entière. Entrez n'importe quelle valeur entière et appuyez sur la touche Entrée. Le programme générera la valeur de code de hachage pour la valeur entière entrée et l'affichera sur la console.
Modifions l'application pour générer des codes de hachage pour plusieurs valeurs entières entrées par l'utilisateur.
import java.lang.Integer;
import java.util.Arrays;
import java.util.Scanner;
public class IntegerHashcode {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Entrez le nombre de valeurs entières : ");
int count = sc.nextInt();
int[] values = new int[count];
for (int i = 0; i < count; i++) {
System.out.print("Entrez la valeur entière " + (i+1) + " : ");
values[i] = sc.nextInt();
}
int[] hashValues = new int[count];
for (int i = 0; i < count; i++) {
hashValues[i] = Integer.hashCode(values[i]);
}
System.out.println("Valeurs entières entrées : " + Arrays.toString(values));
System.out.println("Valeurs de code de hachage correspondantes : " + Arrays.toString(hashValues));
}
}
Dans le code ci-dessus, nous avons ajouté une boucle pour lire plusieurs valeurs entières de l'utilisateur et générer des valeurs de code de hachage pour elles. Nous stockons les valeurs entières et les valeurs de code de hachage dans des tableaux séparés et les affichons sur la console à l'aide de la méthode toString()
de la classe Arrays
.
Enregistrez et fermez le fichier. Compilez à nouveau le fichier IntegerHashcode.java
à l'aide de la commande ci-dessous.
javac IntegerHashcode.java
Exécutez le programme modifié à l'aide de la commande ci-dessous.
java IntegerHashcode
Suivez les invitations pour entrer plusieurs valeurs entières. Le programme générera les valeurs de code de hachage pour chaque valeur entière et les affichera sur la console.
Une collision de code de hachage se produit lorsqu'un même code de hachage est généré pour plusieurs objets. Bien que la méthode hashCode(int n)
génère des valeurs de code de hachage uniques pour une valeur entière donnée, elle n'est pas infaillible. Il existe toujours un risque de collisions de codes de hachage, en particulier lorsque les valeurs de code de hachage et l'algorithme de base générant les codes de hachage ne sont pas suffisamment robustes.
Démontrons une collision de code de hachage à l'aide de la méthode hashCode(int n)
. Modifions l'application en générant des valeurs de code de hachage pour un ensemble de valeurs entières prédéfinies comme indiqué ci-dessous.
import java.lang.Integer;
import java.util.Arrays;
public class IntegerHashcode {
public static void main(String[] args) {
int[] values = {100, 200, 300, 400, 500};
int[] hashValues = new int[values.length];
for (int i = 0; i < values.length; i++) {
hashValues[i] = Integer.hashCode(values[i]);
}
System.out.println("Valeurs entières d'entrée : " + Arrays.toString(values));
System.out.println("Valeurs de code de hachage correspondantes : " + Arrays.toString(hashValues));
}
}
Dans le code ci-dessus, nous avons défini à l'avance un tableau de valeurs entières et généré des valeurs de code de hachage pour chacune d'entre elles. Nous affichons ensuite les valeurs d'entrée et leurs valeurs de code de hachage correspondantes sur la console.
Enregistrez et fermez le fichier. Compilez le fichier IntegerHashcode.java
une dernière fois à l'aide de la commande ci-dessous.
javac IntegerHashcode.java
Exécutez le programme final à l'aide de la commande ci-dessous.
java IntegerHashcode
Vous remarquerez que les valeurs de code de hachage de 100
et 200
sont les mêmes. Il s'agit d'une collision de code de hachage. Bien que les collisions de code de hachage soient rares, elles peuvent potentiellement entraîner des problèmes avec les collections basées sur les hachages en Java.
Dans ce laboratoire, nous avons appris à connaître la méthode hashCode(int n)
de la classe Integer
de Java. Nous avons appris à générer des valeurs de code de hachage uniques pour les valeurs entières à l'aide de cette méthode. Nous avons également appris à gérer les collisions de codes de hachage et les limites des codes de hachage en Java.