概念

哈希函数采用可变长度的输入数据并产生固定长度的输出值。我们通常将其称为哈希码、摘要、哈希值或简称哈希。

  • 散列是一种单向过程。
    • 因此,我们无法从其哈希中检索原始数据。
  • 哈希函数是确定性的。
    • 因此,当我们将相同的输入传递给哈希函数时,它总是生成相同的输出哈希码,例如 SHA-1 哈希值是 160 位长。
  • 一致性
    • 哈希值应该均匀分布在可能的值上。
public static int hashCode(Object a[]) {
    if (a == null)
        return 0;

    int result = 1;

    for (Object element : a)
        result = 31 * result + (element == null ? 0 : element.hashCode());

    return result;
}

哈希碰撞

哈希碰撞是指两个不同的输入得到两个不同的输出。这是不可避免的。

算法 输出长度(位 bits) 输出长度(字节 bytes)
MD5 128 16
SHA-1 160 20
RipeMD-160 160 20
SHA-256 256 32
SHA-512 512 64

总结

  1. 在Java中,hashCode()方法是用于返回对象的哈希码值(hash code)的方法。哈希码是一种在哈希表中查找对象时,根据对象的哈希码值来进行快速查找的机制。

  2. 当一个对象被创建时,系统会为该对象生成一个唯一的哈希码值,并且当使用get()方法从哈希表中取出对象时,系统也会根据对象的哈希码值进行相应的快速定位。

  3. 哈希码值在Java中可以通过 Object 类的hashCode()方法来获取。但需要注意的是,在重写自定义对象的 equals() 方法时,通常还要重写 hashCode()方法,以确保保证两个对象如果它们的equals()方法返回true,则它们的hashCode()方法的返回值也一定相等。

参考

Java哈希算法总结:https://blog.csdn.net/weixin_72718348/article/details/131643649 Java哈希码详解:https://www.python100.com/html/53977.html