Метод hashCode() класса Integer в Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабе мы рассмотрим использование метода hashCode(int n) класса Integer в Java. Мы узнаем, как генерировать уникальное целочисленное значение, которое известно как хэш-код, для заданного целочисленного значения.

Создание файла 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.