两个对象的 hashCode()相同,则值一定相同吗?面试篇(第三天)

简介: 两个对象的 hashCode()相同,则值一定相同吗?本文带大家回答这个问题。

初级回答



不一定相同,因为hashCode是根据一定的规则计算出来的,不同值的hashCode有可能相同,如图。


19.png


在这里“Ma”和“NB”计算出来的hashCode值都为2484,但是他们的真实值是不相等的,所以两个对象的hashCode()相同,值则不一定相同。我们看一下hashCode()方法的源码下图:


20.png


在源码中我们可以看到是对值进行了一系列的计算,所以有可能不同的值计算出来的hashCode()相同,但是同一个值的hashCode()是不会变的,所以可以根据字符串值推算出它的hashCode(),但是不能根据hashCode()的值推算出字符串的值。


高级回答



hashCode()存在的意义是什么?我们通过前面可以了解到hashCode()将一个字符串的值变为了一个整数,那么这样做的作用是什么呢?我们来看一段代码,如图。


22.png


我们平时经常用到map来存储对象,因为map是key,value形式的,它不像list形式的集合可以有顺序的从0开始往集合里放数据,而是随意的放,但是取值的话就很麻烦,因为它存放值的时候没有顺序,所以取值的时候根据key去里面一个一个对比,等找到key相等的值就取出,这样就会造成效率问题。


当我们用到hashCode()可以看到我们将name计算为3373707,age计算为98511,这样的话我们存值的时候就根据计算后的数值进行对应位置的存储,同样当我们get取值的时候再次将key计算为hashCode()值,因为同一个字符串hashCode()值相等,这个时候我们就可以直接根据hashCode()值将对应位置的数据取出,就不需要对key一个一个进行对比了,这样大大提高了效率,这就是为什么有hashCode()存在的原因了。



相关文章
|
5天前
|
存储 JavaScript 前端开发
【面试题】JS的14种去重方法,看看你知道多少(包含数组对象去重)
【面试题】JS的14种去重方法,看看你知道多少(包含数组对象去重)
|
5天前
|
JavaScript 前端开发 Java
【面试题】new 一个对象时,js 做了什么?
【面试题】new 一个对象时,js 做了什么?
|
7月前
|
Java
【面试题精讲】JVM中哪些对象可以被称为GC ROOT对象
【面试题精讲】JVM中哪些对象可以被称为GC ROOT对象
|
7月前
|
Java
Java 最常见的面试题:怎么判断对象是否可以被回收?
Java 最常见的面试题:怎么判断对象是否可以被回收?
|
5天前
|
存储 编译器 程序员
近4w字吐血整理!只要你认真看完【C++编程核心知识】分分钟吊打面试官(包含:内存、函数、引用、类与对象、文件操作)
近4w字吐血整理!只要你认真看完【C++编程核心知识】分分钟吊打面试官(包含:内存、函数、引用、类与对象、文件操作)
113 0
|
7月前
|
设计模式 Java
每日一道面试题之在java中,有哪些方式可以实现对象的实例化?
每日一道面试题之在java中,有哪些方式可以实现对象的实例化?
|
5天前
|
安全 Java 程序员
面试题:什么是对象安全?
面试题:什么是对象安全?
15 0
|
9月前
|
JSON JavaScript 前端开发
面试官:JS判断对象为空有几种方法?
面试官:JS判断对象为空有几种方法?
|
5天前
|
设计模式 前端开发 JavaScript
【面试题】对象、原型、原型链与继承 ,你了解多少?
【面试题】对象、原型、原型链与继承 ,你了解多少?
|
5天前
|
设计模式 前端开发 JavaScript
【面试题】 对象、原型、原型链与继承?这次我懂了!
【面试题】 对象、原型、原型链与继承?这次我懂了!