可以从这个角度理解:在无重合集合中插入一条数据的时候,会先判断hashCode是否相等,如果hashCode不相等,那么可以直接认为该集合中没有出现过这个数据;如果hashCode相等,会接着判断equals是否相等,因为会有哈希冲突,所以不能直接根据hashCode相等判断两个对象相等,如果equals也相等,才会认为集合中已经出现过该数据,。使用hashCode的原因是可以快速过滤掉不相等的,因为如果hashCode不相等那么equals也必然不相等。这也是为什么重写了equals就一定也要重写hashCode的原因,因为如果不重写的话,会出现equals相同但是hashCode不想等的情况,这就乱套了。从底层来说的话,hashCode是把对象的地址转换成数字,equals不重写的话比较的其实就是地址,结合哈希冲突就好理解了。

相关推荐

01-14 15:08
东南大学 Java
点赞 评论 收藏
分享
牛客网
牛客企业服务