请问我这样理解有何不妥

请问我这样理解有何不妥

1.既然hashCode是规则,用来决定被查找的数据该放那个桶里,equal方法用来遍历桶里的元素,那么在本例当中,我们传进来一个huahua1的对象,先根据hashCode规则来判断它在哪个桶里,然后在与判定出来的那个桶里的对象进行比较,我们假设huahua和fanfan根据规则,被分别放在A桶和B桶里,那么传进来的huahua1对象根据规则匹配到A桶里,所以它只跟A桶里的huahua对象做equal()比较,对不对?

2.再假设,如果我们传进来一个Dog类对象,根据规则,它既没在A桶也没在B桶,这时怎么办?因为规则是已经定好的,系统是会判定这个Dog类对象不存在而直接允许它添加到hashSet中呢,还是会重新修改规则,创建个C桶然后将这个Dog类对象放进去?  

3.能否这样理解,这个hashCode规则系统在定义的时候就预留了空间,当其他类型的对象传进来会自动添加这个“桶"来存放新对象



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕珊 2018-03-22 15:56:19

第一个问题理解的对

第二个问题,是根据规则进行比较,所以不会把Dog对象放进去。Dog对象既然能进行比较,所以肯定是存在的啊,只是还没有添加到HashSet集合中,如果HashSet中没有重复的数据才会添加

第三个问题,hashCode规则跟预留空间没有关系。你这么理解,hashCode()和equals()方法是用来判断两个对象是否相等的,而为什么要进行判断两个对象是否相等,是因为HashSet中不允许添加重复数据,为了演示这个。所以同学要理清楚因果关系。

祝学习愉快!

  • 提问者 liqihang #1
    还是第二个问题,两点疑问: 1.Dog对象根据规则比较没有相应的桶存放,那么他一定不会重复Set中的数据,一定会被添加进去,对吗? 2,如果把Dog对象添加到HashSet集合中去之后,那么它会放在我们假设的A桶还是B桶里去,还是会根据规则去安排Dog对象。
    2018-03-22 19:26:09
  • 好帮手慕珊 回复 提问者 liqihang #2
    第一个问题,如果Dog对象没有查询到相同的,就会被加入到集合中。2、具体放到哪个同,看hashCode的规则,符合哪个就放到哪里。祝学习愉快!
    2018-03-23 09:19:44
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师