美国上市公司,专注Java培训21年

Java中hashCodes是怎么实现的呢?


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()方法便不需要存到对象头。


【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多
  • 零基础Java培训学习路线
    零基础Java培训学习路线
    任何学习都是从无基础到有基础的,很多Java初学者在学过一段时间会觉得Java学习最头疼的不是语法结构的繁杂,而是Java本身体系结构的庞大。深切的感受到了零基础学习Java如果没有一个好的Java学习路线很容易半途而废,最后自己学成一团乱麻,零基础学习Java建议参加Java培训,这样Java培训学习路线就很清晰了。那么零基础Java培训学习路线 详情>>

    2019-02-28

  • 零基础学习Java有必要参加培训吗?
    零基础学习Java有必要参加培训吗?
    零基础学Java有必要参加培训吗?我作为一个转行做Java的“过来人”回答这个问题还是比较有资格的,我是报班学的。我觉得这就是最有效,最快的学习方式,大家都经历过各个阶段的学习,任何时候大家都应该明白有一个经验丰富的老师教,遇到问题随时可以解答,并且遇到错误能够第一时间被发现和被改正,这是进步最快的方式。 详情>>

    2019-04-01

  • 零基础学Java编程从哪里入手?
    零基础学Java编程从哪里入手?
    零基础学Java编程从哪里入手?零基础学习Java编程可以从以下几个步骤入手: 详情>>

    2024-04-08

  • 学习Java编程如何快速入门?
    学习Java编程如何快速入门?
    学习Java编程如何快速入门?学习Java编程快速入门的关键在于有计划地掌握基础知识,通过实践加深理解,并不断地积累经验。以下是详细步骤: 详情>>

    2024-01-31

  • Java开班时间

    收起