A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐帅 中级黑马   /  2012-6-9 19:23  /  1586 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在录入一个班级学生信息的时候,为什么要覆盖 hashCode( )方法呢?
只覆盖equals( ) 方法来避免录入相同的学生不就行了么?
在视频中毕老师说可能存到到哈希集合中,是为什么呢。直接指定TreeSet不就行了么?
大侠帮忙解答下,先谢谢了

4 个回复

倒序浏览

回帖奖励 +3

毕老师的意思是:增加代码的扩展性,以后学生对象可能会存到到哈希集合中,就先写好hashCode( )方法。如果不写的话,这个对象明显就不能往哈希集合里扩展了,以后真的出现要应用到哈希集合里那就得更改源代码了。老师强调:修改源代码是很痛苦的。所以就尽量增加代码的扩展性了。
回复 使用道具 举报
在录入一个班级学生信息的时候,为什么要覆盖 hashCode( )方法呢?

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

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

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

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

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

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

明白了、进一步增强了对代码扩展性的了解。谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马