Java Float のハッシュコードの探索

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

はじめに

この実験では、Java のFloatクラスのhashCode()メソッドについて学びます。このメソッドは、float値のハッシュコードを取得するために使用されます。ハッシュコードは、Java のすべてのオブジェクトに関連付けられる一意の整数値です。この実験では、hashCode()メソッドを使用する方法についてのさまざまなコード例を通じて案内します。

新しい Java ファイルを作成する

まず、次のコマンドを使用して~/project/FloatHashcode.javaに新しい Java ファイルを作成します。

touch ~/project/FloatHashcode.java

Float 変数を定義する

このステップでは、2 つのFloat変数を定義し、それぞれ異なる float 値で初期化します。また、java.langパッケージからFloatクラスをインポートします。

import java.lang.Float;

public class FloatHashcode {
    public static void main(String[] args) {
        Float n1 = 2.3456F;
        Float n2 = -4.567F;
    }
}

Float の hashCode() メソッドを使ってハッシュコードを取得する

このステップでは、前のステップで定義したFloat変数のハッシュコードを取得するために、FloatクラスのhashCode()メソッドを使用します。

import java.lang.Float;

public class FloatHashcode {
    public static void main(String[] args) {
        Float n1 = 2.3456F;
        Float n2 = -4.567F;

        int hash1 = n1.hashCode(); // n1 のハッシュコードを取得する
        int hash2 = n2.hashCode(); // n2 のハッシュコードを取得する

        System.out.println("Hash code for n1 is " + hash1);
        System.out.println("Hash code for n2 is " + hash2);
    }
}

ファイルをコンパイルして実行するには、ターミナルで次のコマンドを実行します。

javac ~/project/FloatHashcode.java
java FloatHashcode

ユーザー入力に対するハッシュコードを取得する

このステップでは、ユーザーにfloat値の入力を促し、入力値のハッシュコードをFloatクラスのhashCode()メソッドを使って取得し、その後、ハッシュコードをコンソールに表示するプログラムを作成します。

import java.util.Scanner;
import java.lang.Float;

public class FloatHashcode {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Enter a float value: ");
        float input = scanner.nextFloat();
        Float n = input;

        int hashCode = n.hashCode();

        System.out.println("Hash code for the input " + input + " is " + hashCode);
    }
}

ファイルをコンパイルして実行するには、ターミナルで次のコマンドを実行します。

javac ~/project/FloatHashcode.java
java FloatHashcode

2 つの Float 値のハッシュコードを比較する

このステップでは、2 つのFloat値のハッシュコードを比較するプログラムを作成します。

import java.lang.Float;

public class FloatHashcode {
    public static void main(String[] args) {
        Float n1 = 2.3456F;
        Float n2 = 2.3456F;

        int hash1 = n1.hashCode();
        int hash2 = n2.hashCode();

        if (hash1 == hash2) {
            System.out.println("The hash codes of n1 and n2 are equal");
        } else {
            System.out.println("The hash codes of n1 and n2 are not equal");
        }
    }
}

ファイルをコンパイルして実行するには、ターミナルで次のコマンドを実行します。

javac ~/project/FloatHashcode.java
java FloatHashcode

クラス内で hashCode() メソッドをオーバーライドする

このステップでは、クラス内でhashCode()メソッドをオーバーライドします。ここでは、2 つのfloat変数abを持つMyClassクラスを作成します。その後、クラス内でhashCode()メソッドをオーバーライドし、式(31 * Float.floatToIntBits(a)) + Float.floatToIntBits(b)を使用してオブジェクトのハッシュコードを計算します。

import java.lang.Float;

class MyClass {
    float a;
    float b;

    public MyClass(float a, float b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public int hashCode() {
        return (31 * Float.floatToIntBits(a)) + Float.floatToIntBits(b);
    }
}

public class FloatHashcode {
    public static void main(String[] args) {
        MyClass obj = new MyClass(2.3456F, -4.567F);

        int hash = obj.hashCode();

        System.out.println("Hash code for obj is " + hash);
    }
}

ファイルをコンパイルして実行するには、ターミナルで次のコマンドを実行します。

javac ~/project/FloatHashcode.java
java FloatHashcode

null ポインタを処理する

このステップでは、Floatオブジェクトのハッシュコードを取得する際にヌルポインタを処理するプログラムを作成します。

import java.lang.Float;

public class FloatHashcode {
    public static void main(String[] args) {
        Float n = null;

        int hash = (n!= null)? n.hashCode() : 0;

        System.out.println("Hash code for n is " + hash);
    }
}

ファイルをコンパイルして実行するには、ターミナルで次のコマンドを実行します。

javac ~/project/FloatHashcode.java
java FloatHashcode

ハッシュコードを取得するために Objects.hashCode() を使用する

このステップでは、Objects.hashCode()メソッドを使ってFloatオブジェクトのハッシュコードを取得します。このメソッドは、渡された任意のオブジェクトのハッシュコードを返し、ヌルポインタを適切に処理します。

import java.lang.Float;
import java.util.Objects;

public class FloatHashcode {
    public static void main(String[] args) {
        Float n = null;

        int hash = Objects.hashCode(n);

        System.out.println("Hash code for n is " + hash);
    }
}

ファイルをコンパイルして実行するには、ターミナルで次のコマンドを実行します。

javac ~/project/FloatHashcode.java
java FloatHashcode

プリミティブな浮動小数点数に対して Float.hashCode(float) を使用する

このステップでは、Float.hashCode(float)メソッドを使用して、プリミティブなfloat値のハッシュコードを取得します。このメソッドは、floatToIntBits(float)メソッドが返すのと同じハッシュコードを返します。

import java.lang.Float;

public class FloatHashcode {
    public static void main(String[] args) {
        float f = 2.3456F;

        int hash = Float.hashCode(f);

        System.out.println("Hash code for f is " + hash);
    }
}

ファイルをコンパイルして実行するには、ターミナルで次のコマンドを実行します。

javac ~/project/FloatHashcode.java
java FloatHashcode

Float.floatToIntBits(float) を使用して浮動小数点数の整数表現を取得する

このステップでは、Float.floatToIntBits(float)メソッドを使用して、float値の整数表現を取得します。このメソッドは、float値のハッシュコードを計算する際に使用される同じ整数表現を返します。

import java.lang.Float;

public class FloatHashcode {
    public static void main(String[] args) {
        float f = 2.3456F;

        int intBits = Float.floatToIntBits(f);

        System.out.println("Integer representation of f is " + intBits);
    }
}

ファイルをコンパイルして実行するには、ターミナルで次のコマンドを実行します。

javac ~/project/FloatHashcode.java
java FloatHashcode

まとめ

この実験では、Java のFloatクラスのhashCode()メソッドについて学びました。float値のハッシュコードを取得する方法、クラス内でhashCode()メソッドをオーバーライドする方法、Objects.hashCode()メソッドの使用方法、およびオブジェクトのハッシュコードを取得する際のヌルポインタの処理方法について学びました。また、float値の整数表現を取得するために使用されるfloatToIntBits(float)メソッドについても学びました。