hash 的定义
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
Java 中 hash 值的含义
- hash 值主要是用来在散列存储结构中确定对象的存储地址的,提高对象的查询效率,如HashMap、HashTable等;
- 如果两个对象相同,那么这两个对象的 hash 值一定相等;
- 如果要重写对象的 equals 方法,那么尽量重写对象的 hashCode 方法;
- 两个对象的 hash 值相等,并不一定表示两个对象相同。
String中的 hashCode
在了解了 hash 值的含义后,在进行 hash 计算的时候,我们希望尽量减小生产重复 hash 值的概率,使得数据更离散一些,如果重复 hash 值太多,散列存储结构中同一 hash 值映射的对象也会很多,导致降低查询效率。而且 equals() 计算的准确性也会降低。
接下来分析 String 类的 hashCode() 方法,代码如下:
public int hashCode() {
int h = hash