黑马程序员技术交流社区

标题: 关于覆盖hashCode 的一个疑问 [打印本页]

作者: 徐帅    时间: 2012-6-9 19:23
标题: 关于覆盖hashCode 的一个疑问
在录入一个班级学生信息的时候,为什么要覆盖 hashCode( )方法呢?
只覆盖equals( ) 方法来避免录入相同的学生不就行了么?
在视频中毕老师说可能存到到哈希集合中,是为什么呢。直接指定TreeSet不就行了么?
大侠帮忙解答下,先谢谢了
作者: 付信榕    时间: 2012-6-9 19:53
毕老师的意思是:增加代码的扩展性,以后学生对象可能会存到到哈希集合中,就先写好hashCode( )方法。如果不写的话,这个对象明显就不能往哈希集合里扩展了,以后真的出现要应用到哈希集合里那就得更改源代码了。老师强调:修改源代码是很痛苦的。所以就尽量增加代码的扩展性了。
作者: 潘东升    时间: 2012-6-9 20:28
在录入一个班级学生信息的时候,为什么要覆盖 hashCode( )方法呢?

把对象存进HashSet时,会先比较hashCode方法的返回值,若相同才调用equals方法再进一步判断,所以一般都要覆盖hashCode方法是为了尽可能避免哈希值一样,这样就不用再作进一步的判断而浪费资源。

只覆盖equals( ) 方法来避免录入相同的学生不就行了么?

只覆盖equals方法,让对象作第二步的判断是浪费资源。

直接指定TreeSet当然可以了,但是有没有可能使用HashSet?,就像外面一些饭馆里摆放牙签,顾客有可能用有可能不用,所以最好摆着。
作者: 徐帅    时间: 2012-6-9 21:41
潘东升 发表于 2012-6-9 20:28
在录入一个班级学生信息的时候,为什么要覆盖 hashCode( )方法呢?

把对象存进HashSet时,会先比较hashCod ...

解释的挺形象。谢谢了啊
作者: 徐帅    时间: 2012-6-9 21:42
付信榕 发表于 2012-6-9 19:53
毕老师的意思是:增加代码的扩展性,以后学生对象可能会存到到哈希集合中,就先写好hashCode( )方法。如果 ...

明白了、进一步增强了对代码扩展性的了解。谢谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2