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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈建华 中级黑马   /  2012-12-6 15:21  /  1451 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

1 个回复

倒序浏览

当向集合Set中增加对象时,首先集合计算要增加对象的hashCode码,根据该值来得到
一个位置用来存放当前对象。
如果在该位置没有一个对象存在的话,那么集合Set认为该对象在集合中不存在,直接
增加进去。
如果在该位置有一个对象存在的话,接着将准备增加到集合中的对象与该位置上的对象
进行equals方法比较。
如果该equals方法返回false,那么集合认为集合中不存在该对象,再进行一次散列,
将该对象放到散列后计算出来的地址中。
如果equals方法返回true,那么集合认为集合中已经存在该对象了,不再将该对象增加到集合中。



equal:是用来比较两个对象内部的内容是否相等的,由于所有的类都是继承自java.lang.Object类的,所以
如果没有对该方法进行    覆盖的话,调用 的仍然是Object类中的方法,而Object中的equal方法返回的却是==的判
断,因此,如果在没有进行该方法的  覆盖后,调用该方法是没有任何意义的。
==:是用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的
         是真正意义上的指针操作。


评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马