Java の Integer ハッシュコードメソッド

JavaBeginner
オンラインで実践に進む

はじめに

この実験では、Java のIntegerクラスのhashCode(int n)メソッドの使い方について説明します。与えられた整数値に対して、ハッシュコードとして知られる一意の整数値を生成する方法を学びます。

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 のハッシュベースのコレクションに問題を引き起こす可能性があります。

まとめ

この実験では、Java のIntegerクラスのhashCode(int n)メソッドについて学びました。このメソッドを使用して整数値に対して一意のハッシュコード値を生成する方法を学びました。また、Java におけるハッシュコードの衝突の処理方法とハッシュコードの制限についても学びました。