摘自别人的评论:http://blog.csdn.net/fhm727/article/details/5221792

当向集合Set中增加对象时,首先集合计算要增加对象的hashCode码,根据该值来得到
一个位置用来存放当前对象。

如果在该位置没有一个对象存在的话,那么集合Set认为该对象在集合中不存在,直接
增加进去。

如果在该位置有一个对象存在的话,接着将准备增加到集合中的对象与该位置上的对象
进行equals方法比较。

如果该equals方法返回false,那么集合认为集合中不存在该对象,再进行一次散列,
将该对象放到散列后计算出来的地址中。

如果equals方法返回true,那么集合认为集合中已经存在该对象了,不再将该对象增加到集合中。


重写equals方法的时候必须重写hashCode方法。如果一个类的两个对象,使用equals
方法比较时,结果为true,那么这两个对象具有相同的hashCode。原因是equals方法为true,表明是同一个对象,它们的hashCode当然相同。(Object类的equals方法比较的是地址)

3
Object类的hashCode方法返回的是Object对象的内存地址。我们可以通过Integer.toHexString(newObject().hashCode());来得到。

Java里面的hashSet中,如何判断两个对象是否相等?

a.
判断两个对象的hashCode是否相等。

如果不相等,认为两个对象不相等。完毕

如果相等,转入2

b.
判断两个对象是否equals

如果不相等,认为两个对象不相等。
如果相等,认为两个对象相等。

最新文章

  1. C#设计模式-策略者模式
  2. android图片透明度跟缩放大小动画事件
  3. php集成动态口令认证
  4. .net 常用的命名空间和类
  5. strcmp函数使用总结
  6. mac下安装使用svn
  7. storm的作业单元:Topology
  8. U3D 飞机大战(MVC模式)解析--面向对象编程思想
  9. HTTP-304 NOT Modified
  10. 【数据库】MySQL中的共享锁与排他锁
  11. VS系列控制台闪退解决
  12. python操作mysql数据库增删改查的dbutils实例
  13. http协议介绍及get与post请求、响应状态码
  14. day5:字典dict
  15. RSA解密解密
  16. mysql 时间戳转换 、cnd、dns 通俗理解
  17. Fiddler配置
  18. 浏览器根对象window之history
  19. torch7 调用caffe model 作为pretrain
  20. Asp.net让某一页设置成gb2312或utf-8的方法

热门文章

  1. stickey-footer实现footer固定页面底部
  2. js星星评分插件
  3. 【干货】查看windows文件系统中的数据—利用簇号查看文件与恢复文件
  4. MySQL 5.6.10 跨平台GTID复制实践
  5. http和socket之长连接和短连接区别【转】
  6. c# XML读取
  7. 两种常量类型-readonly和const
  8. Qt 数字和字符处理总结
  9. 巧用PHP双$功能兼容线上线下配置文件
  10. [转]如何取得当前正在执行的shell脚本的绝对路径?