Java Integer Hashcode 方法

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

本实验将介绍 Java Integer 类中 hashCode(int n) 方法的使用。我们将学习如何为给定的整数值生成一个唯一的整数值,即哈希码(hash code)。

创建 Java 程序文件

~/project 目录下创建一个名为 IntegerHashcode.java 的文件,并使用你喜欢的文本编辑器打开它。

touch ~/project/IntegerHashcode.java
touch ~/project/IntegerHashcode.java

导入所需的类

java.lang 包中导入 Integer 类。

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);
    }
}

在上述代码中,我们从 java.util 包中导入了 Scanner 类用于输入。我们提示用户输入一个整数值,并使用 Scanner 类的 nextInt() 方法读取该值。然后,我们使用 hashCode(int n) 方法为输入的整数生成哈希码值,并使用 println() 方法将其打印到控制台。

编译并运行程序

保存并关闭文件。使用以下命令编译 IntegerHashcode.java 文件。

javac IntegerHashcode.java

使用以下命令运行程序。

java IntegerHashcode

程序会提示你输入一个整数值。输入任意整数值并按回车键。程序将为输入的整数值生成哈希码,并在控制台上显示结果。

修改程序

让我们修改应用程序,使其能够为用户输入的多个整数值生成哈希码。

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));
    }
}

在上述代码中,我们添加了一个循环,用于从用户读取多个整数值并为其生成哈希码。我们将整数值和哈希码值分别存储在数组中,并使用 Arrays 类的 toString() 方法将它们打印到控制台。

编译并运行修改后的程序

保存并关闭文件。使用以下命令再次编译 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

你会注意到 100200 的哈希码值是相同的。这就是哈希码冲突。尽管哈希码冲突很少见,但它们可能会对 Java 中基于哈希的集合(hash-based collections)造成潜在问题。

总结

在本实验中,我们学习了 Java Integer 类的 hashCode(int n) 方法。我们了解了如何使用该方法为整数值生成唯一的哈希码值。同时,我们还学习了如何处理哈希码冲突以及 Java 中哈希码的局限性。