hash与hashcode

205 阅读2分钟

什么是hash?

hash 散列函数,把任意长度的输入输出成固定长度的输出。输出的值就是散列值,也就是hashcode。

这种转换是一种压缩映射,散列值的空间远小于输入值的空间。不同的输入可能会产生相同的输出。所以不可能通过散列值来确定唯一的输入值。

使用hash算法可以提高存储空间利用率,可以提高数据的查询效率。

什么是hashcode?

通过hash算法得出的散列值就是hashcode。

hashCode 的作用是什么?

  • hashCode 的存在主要是用于查找的快捷性,如 Hashtable,HashMap 等, hashCode 是用来在散列存储结构中确定对象的存储地址的;
  • 如果两个对象相同,就是适用于 equals(java.lang.Object) 方法,那么这两 个对象的 hashCode 一定要相同;
  • 如果对象的 equals 方法被重写,那么对象的 hashCode 也尽量重写,并且产 生 hashCode 使用的对象,一定要和 equals 方法中使用的一致,否则就会违 反上面提到的第 2 点;
  • 两个对象的 hashCode 相同,并不一定表示两个对象就相同,也就是不一定适 用于 equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结 构中.

hashcode与java对象的关系?

每个java对象的组成都是有三部分组成的。对象头实例数据对齐填充字节

其中对象头包含3个部分:Mark Word指向类的指针数组长度如果当前对象不是数组则没有此部分

日常编程中的使用

equals方法

hashmap的使用,hash计算索引下标。

mysql中的hash索引

面试题

hashmap中是如何解决hash冲突的呢?