概念
哈希函数采用可变长度的输入数据并产生固定长度的输出值。我们通常将其称为哈希码、摘要、哈希值或简称哈希。
- 散列是一种单向过程。
- 因此,我们无法从其哈希中检索原始数据。
- 哈希函数是确定性的。
- 因此,当我们将相同的输入传递给哈希函数时,它总是生成相同的输出哈希码,例如 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 |
总结
-
在Java中,
hashCode()
方法是用于返回对象的哈希码值(hash code)的方法。哈希码是一种在哈希表中查找对象时,根据对象的哈希码值来进行快速查找的机制。 -
当一个对象被创建时,系统会为该对象生成一个唯一的哈希码值,并且当使用get()方法从哈希表中取出对象时,系统也会根据对象的哈希码值进行相应的快速定位。
-
哈希码值在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