为啥要重写toString方法和hashcode方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥要重写toString方法和hashcode方法相关的知识,希望对你有一定的参考价值。
不一定要重写,有自己的需要才重写。为什么重写先弄明白它们的用途,equals是为了比较是否相等。
比如你有两个user,现在某个软件的要求是只要它们id属性相同就是相等的,那就可以重写eqauls,只对id进行对比。
tostring是为了让你更容易看懂一个对象,当对象在控制台打印出来时你想看到一堆无意义的代码吗?那就是调用默认的tostring的结果。你可以重写自己想要的输出,看到对象的每个属性。
hashcode是hash集合中用来对比是否相等的根据,是一个根据对象内容算出来的数值,对比起来比equals快得多。更具体的解释你自己百度搜吧,很多东西要深入认识也不是几句话就能说明白的。 参考技术A equals
方法和
hashcode
方法没有必然关系,并不是说重写
equals
方法就一定要重写
hashcode
方法。
用途不同,
equals
用来比较两个对象是否相等,在大多数
JDK
的集合类中判断唯一性的时候使用的都是
equals
方法。而
hashcode
方法用来计算对象的
Hash
值,基于
Hash
算法存放数据的集合会用到,比如
HashMap、HashSet。
equals
方法很好理解,区别于直接比较对象内存地址的
==
,它被设计为用来比较对象内容语义上的相等。
而要理解
hashcode
方法,首先你要知道什么是散列算法,了解一下
HashMap
底下的存储结构和存放读取数据的过程(对
key
调用
hashcode
得散列值,找到该散列值对应的桶,往桶里放
value)。你可以认为
hashcode
是为了给对象分类用的。
以上是关于为啥要重写toString方法和hashcode方法的主要内容,如果未能解决你的问题,请参考以下文章
JAVA中重写equals方法为啥要重写hashcode方法说明
【彻底理解】 为啥重写equals()方法为啥要重写hashCode()方法
java中重写Object类的equals方法为啥要重写hashcode方法?不重写可以吗?