Java Float 哈希码探索

JavaJavaBeginner
立即练习

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

介绍

在本实验中,你将学习 Java Float 类中的 hashCode() 方法。该方法用于获取 float 值的哈希码。哈希码是一个唯一的整数值,与 Java 中的每个对象相关联。本实验将通过不同的代码示例,指导你如何使用 hashCode() 方法。

创建一个新的 Java 文件

首先,使用以下命令在 ~/project/FloatHashcode.java 路径下创建一个新的 Java 文件:

touch ~/project/FloatHashcode.java

定义 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 类的 hashCode() 方法获取上一步中定义的 Float 变量的哈希码。

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

比较两个 Float 值的哈希码

在这一步中,创建一个程序来比较两个 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() 方法。这里,我们创建一个 MyClass 类,其中包含两个 float 变量 ab。然后,我们在类中重写 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

处理空指针

在这一步中,创建一个程序,在获取 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 的哈希码

在这一步中,我们使用 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 的整数表示

在这一步中,我们使用 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() 方法以及在获取对象哈希码时处理空指针。你还学习了 floatToIntBits(float) 方法,该方法用于获取 float 值的整数表示。