hashCode和equals面试题

  • 时间:
  • 浏览:5

原先,当你用其中的一个多作为键保存到hashMap、hasoTable或hashSet中,再以“相等的”找原先作为键值去查找让如果们都 的如果,则根本找都也能了。

也不不可能 让如果们都 儿的对象要想装到hashSet,但会 发挥hashSet的形态学 (即不中含一样的对象),则让如果们都 儿就要重写让如果们都 儿类的hashCode()和equals()最好的方法了。像String,Integer等你你这种类内部都有可能 重写了这每每个人多多最好的方法。

不可能 hashCode()并都有完整版可靠,有如果不同的对象让如果们都 生成的hashcode也会一样(生成hash值得公式不可能 居于的那此的问题),也不hashCode()都也能了说是大要素如果可靠,并都有绝对可靠,也不让如果们都 儿都须要得出(PS:以下两条结论是重点,也不人面试的如果都说没哟来):

HashMap获取一个多对象是比较key的hashCode相等和equals为true。

假如重写 equals,就须要重写 hashCode;

4、为那此equals()相等,hashCode就一定要相等,而hashCode相等,却并不求equals相等?

不可能 Set 存储的是不重复的对象,最好的方法 hashCode 和 equals 进行判断,也不 Set 存储的对象须要重写这每每个人多多最好的方法;

hashCode()最好的方法和equals()最好的方法的作用人太好一样,在Java里都有用来对比一个多对象是算不算相等一致。

2、hashCode()既然传输强度那么 高为那此须要equals()呢?

1、阿里巴巴开发规范明确规定:

3、然而hashCode()和equals()一样都有基本类Object里的最好的方法,而和equals()一样,Object里hashCode()上面也不 返回当前对象的地址,不可能 是原先得话,那么 让如果们都 儿相同的一个多类,new一个多对象,不可能 让如果们都 在内存里的地址不同,则让如果们都 的hashCode()不同,也不这显然都有让如果们都 儿如果的,也不让如果们都 儿须要重写让如果们都 儿类的hashCode()最好的方法,即一个多类,在hashCode()上面返回唯一的一个多hash值,比如下面:

这种 hashCode相等,却都须要equal不等,就比如ObjectA和ObjectB让如果们都 都有属性name,那么 hashCode都以name计算,也不hashCode一样,但会 一个多对象属于不这种型,也不equals为false。

一、hashCode()和equals()是那此?

二、hashCode()和equals()的区别

首先,让如果们都 儿要介绍hashCode()和equals()最好的方法的作用是是那此,但会 才说他的区别,说了区别如果再说使用的如果须要注意到的地方,原先的回答思路基本是OK的,不可能 你在了解你这种被委托人我想知道的那就更好了!下边让如果们都 儿就开始英语 英语 介绍:



三、hashCode()和equals()使用的注意事项

3、那么 为那此要重载hashCode呢?

通过hashCode都须要快一点 的查到小内存块。

四、扩展

当然不可能 让如果们都 儿也不 平时想对比一个多对象 是算不算一致,则只重写一个多equals(),但会 利用equals()去对比也行的。

equals()相等的一个多对象让如果们都 的hashCode()肯定相等,也也不 用equals()对比是绝对可靠的。

不可能 标识你你这种类的是他的内部的变量num和name,也不让如果们都 儿就根据让如果们都 返回一个多hash值,作为你你这种类的唯一hash值。

不可能 重写的equals()里一般比较的比较全面比较比较复杂,原先传输强度就比较低,而利用hashCode()进行对比,则假如生成一个多hash值进行比较就都须要了,传输强度很高。

5、为那此须要hashCode?

不可能 自定义对象做为 Map 的键,那么 须要重写 hashCode 和 equals;

通过hashCode比较比equals最好的方法快,当get时先比较hashCode,不可能 hashCode不同,直接返回false。

不可能 是按照hashCode来访问小内存块,也不hashCode须要相等。

2、那此如果须要重写?

一般的地方不须要重载hashCode,都也能了当类须要装到HashTable、HashMap、HashSet等等hash形态学 的集合时才会重载hashCode。

1、equals()既然不可能 能实现对比的功能了,为那此须要hashCode()呢?

hashCode()最好的方法和equals()区别与联系这到面试题,看似简单,根据以往面试星友的情況来说,绝大要素人都有能很好的回答出来,要么那么 逻辑,想到一句也不 一句,要么抓不住重点,答非所问。从你你这种很小的面试题上让如果们都 儿就都须要看出来,对于任何一个多面试题来说,都有要清晰有条理的回答。那么 如何也能回答到点子上但会 让面试官人太好你的逻辑清晰哪?

2、你你这种小量的但会 快速的对象对比一般使用的hash容器中,比如HashSet,HashMap,HashTable等等,比如HashSet里要求对象都也能了重复,则他内部必然要对添添加的每个对象进行对比,而他的对比规则也不 像上面说的那样,先hashCode(),不可能 hashCode()相同,再用equals()验证,不可能 hashCode()都有同,则肯定不同,原先对比的传输强度就很高了。

不可能 你重写了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么 很不可能 某一个多对象明明是“相等”,而hashCode却不一样。

hashCode()相等的一个多对象让如果们都 的equals()不一定相等,也也不 hashCode()都有绝对可靠的。

1、对于须要小量但会 快速的对比得话不可能 都用equals()去做显然传输强度太低,也不正确处理最好的方法是,每当须要对比的如果,首先用hashCode()去对比,不可能 hashCode()不一样,则表示这每每个人多多对象肯定不相等(也也不 并不再用equals()去再对比了),不可能 hashCode()相同,此时再对比让如果们都 的equals(),不可能 equals()也相同,则表示这每每个人多多对象是真的相同了,原先既能大大提高了传输强度也保证了对比的绝对正确性!

String 重写了 hashCode 和 equals 最好的方法,也不让如果们都 儿都须要非常愉快地使用 String 对象作为 key 来使用;

下边从一个多深度介绍了让如果们都 的区别:一个多是性能,一个多是可靠性。让如果们都 之间的主要区别也基本体现在这里。