徐州甲骨文IT教育

试听课 + 活动课
填写信息优先获取试听课

位置:学校首页 > 学校动态>徐州Java培训机构哪里靠谱

徐州Java培训机构哪里靠谱

甲骨文OAEC人才产业基地是甲骨文公司在中国重要的发展布局之一。为进一步开拓中国市场、培养积累软件人才、提高服务质量,甲骨文公司利用其自身在软件、数据库、解决方案等方面的地位,联合合作伙伴在中国区建设甲骨文OAEC人才产业基地项目。

Java中hashCode的实现,从我们刚学Java就知道,要重写equal就要一起重写hashCode。但是你有了解过hashCode是如何实现吗?


1、什么是hashCode?

hash是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

总结

能够将数据压缩,针对同一输入具有输出,存在数据冲突。

2、hashcode能干什么

Java的实现

既然Java中所以的对象都继承自Object。那我们就看看Object的hashCode实现吧。竟然是native方法,查看hash实现源码发现有以下实现方式。

随机数:基于内存地址生成

固定值:1,用来测试

自增:利用位移生成随机数

可以看到除了第三种,其余的算法都不具有一致性。那么当我们没有重新Object.hashCode()的时候,JVM是怎么处理生成的hashcode呢?

对象头:

jvm 将这种方式生成的hashcode存到了Java对象头里。对象头只是存储Object.hashCode()方法生成的hash。如果我们重新的hashCode()方法便不需要存到对象头。

领取试听课
温馨提示:为不影响您的学业,来校区前请先电话或QQ咨询,方便我校安排相关的专业老师为您解答
版权所有:搜学搜课(www.soxsok.com) 技术支持:搜学搜课网