介绍
本实验将介绍 Java Integer
类中 hashCode(int n)
方法的使用。我们将学习如何为给定的整数值生成一个唯一的整数值,即哈希码(hash code)。
本实验将介绍 Java Integer
类中 hashCode(int n)
方法的使用。我们将学习如何为给定的整数值生成一个唯一的整数值,即哈希码(hash code)。
在 ~/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
你会注意到 100
和 200
的哈希码值是相同的。这就是哈希码冲突。尽管哈希码冲突很少见,但它们可能会对 Java 中基于哈希的集合(hash-based collections)造成潜在问题。
在本实验中,我们学习了 Java Integer
类的 hashCode(int n)
方法。我们了解了如何使用该方法为整数值生成唯一的哈希码值。同时,我们还学习了如何处理哈希码冲突以及 Java 中哈希码的局限性。