Введение
В этом лабе мы рассмотрим использование метода hashCode(int n)
класса Integer
в Java. Мы узнаем, как генерировать уникальное целочисленное значение, которое известно как хэш-код, для заданного целочисленного значения.
💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал
В этом лабе мы рассмотрим использование метода hashCode(int n)
класса Integer
в Java. Мы узнаем, как генерировать уникальное целочисленное значение, которое известно как хэш-код, для заданного целочисленного значения.
Создайте файл с именем IntegerHashcode.java
в каталоге ~/project
и откройте его в своем любимом текстовом редакторе.
touch ~/project/IntegerHashcode.java
touch ~/project/IntegerHashcode.java
Импортируйте класс Integer
из пакета java.lang
.
import java.lang.Integer;
В этом шаге мы сгенерируем хэш-коды для целочисленных значений с использованием метода hashCode(int n)
. Мы создадим приложение, которое будет запрашивать у пользователя ввод целочисленного значения и затем генерировать значение хэш-кода для введенного целого числа.
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("Enter an integer value: ");
int value = sc.nextInt();
int hashValue = Integer.hashCode(value);
System.out.println("Hash code value for " + value + " is " + hashValue);
}
}
В приведенном выше коде мы импортировали класс Scanner
из пакета java.util
для ввода. Мы запрашиваем у пользователя ввод целочисленного значения и читаем его с использованием метода nextInt()
класса Scanner
. Затем мы генерируем значение хэш-кода для введенного целого числа с использованием метода hashCode(int n)
и выводим его на консоль с использованием метода println()
.
Сохраните и закройте файл. Скомпилируйте файл IntegerHashcode.java
с использованием следующей команды.
javac IntegerHashcode.java
Запустите программу с использованием следующей команды.
java IntegerHashcode
Вам будет предложено ввести целочисленное значение. Введите любое целочисленное значение и нажмите клавишу Enter. Программа сгенерирует значение хэш-кода для введенного целочисленного значения и выведет его на консоль.
Давайте изменим приложение, чтобы генерировать хэш-коды для нескольких целочисленных значений, введенных пользователем.
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("Enter number of integer values: ");
int count = sc.nextInt();
int[] values = new int[count];
for (int i = 0; i < count; i++) {
System.out.print("Enter integer value " + (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("Entered integer values: " + Arrays.toString(values));
System.out.println("Corresponding hash code values: " + Arrays.toString(hashValues));
}
}
В приведенном выше коде мы добавили цикл для чтения нескольких целочисленных значений от пользователя и генерации для них значений хэш-кода. Мы храним целочисленные значения и значения хэш-кода в отдельных массивах и выводим их на консоль с использованием метода toString()
класса Arrays
.
Сохраните и закройте файл. Скомпилируйте файл IntegerHashcode.java
снова с использованием следующей команды.
javac IntegerHashcode.java
Запустите модифицированную программу с использованием следующей команды.
java IntegerHashcode
Следуйте инструкциям и введите несколько целочисленных значений. Программа сгенерирует значения хэш-кода для каждого целочисленного значения и выведет их на консоль.
Коллизия хэш-кода возникает, когда несколько объектов генерируют одно и то же значение хэш-кода. Хотя метод hashCode(int n)
генерирует уникальные значения хэш-кода для любых заданных целочисленных значений, он не является идеальным. Все еще существует возможность коллизий хэш-кодов, особенно в том случае, когда значения хэш-кодов и алгоритм, генерирующий их, недостаточно надежны.
Давайте покажем коллизию хэш-кода с использованием метода hashCode(int n)
. Измените приложение, генерируя значения хэш-кода для набора предварительно определенных целочисленных значений, как показано ниже.
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("Input integer values: " + Arrays.toString(values));
System.out.println("Corresponding hash code values: " + Arrays.toString(hashValues));
}
}
В приведенном выше коде мы предварительно определили массив целочисленных значений и генерируем для каждого из них значения хэш-кода. Затем мы выводим на консоль и входные значения, и соответствующие им значения хэш-кода.
Сохраните и закройте файл. Скомпилируйте файл IntegerHashcode.java
в последний раз с использованием следующей команды.
javac IntegerHashcode.java
Запустите финальную программу с использованием следующей команды.
java IntegerHashcode
Вы заметите, что значения хэш-кода для 100
и 200
одинаковы. Это коллизия хэш-кода. Хотя коллизии хэш-кода редки, они могут потенциально вызывать проблемы с коллекциями на основе хэш-кодов в Java.
В этом практическом занятии мы изучили метод hashCode(int n)
класса Integer
в Java. Мы узнали, как генерировать уникальные значения хэш-кода для целочисленных значений с использованием этого метода. Мы также узнали, как обрабатывать коллизии хэш-кодов и ограничения хэш-кодов в Java.