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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lindegen 中级黑马   /  2014-6-21 21:51  /  1049 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学到Set无序集合,HashSet保证元素的唯一为什么要先比较hashCode的返回值然后再比较equals呢? 这样有好处吗

4 个回复

正序浏览
根据java核心技术上讲,有时候我们要在一堆数据中查一个元素,象List集合可以根据索引快速查出。但如果忘记索引,那就要遍历整个集合才能想寻找。Set集合之所以根据HashCode(  )存储元素、因为集合内部有一套算法,可以快速根据哈希值查找元素。该算法是用要查找的元素的哈希值除集合总数,余数就为该元素的索引。所以先比较hasHcode(),再根据equals();
回复 使用道具 举报
因为这个样子比较高效,HashSet存放元素的时候,先看地址,吧、只要地址不一样,即使元素内容相同也判断属于是不同的元素。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
也就是说,必须重写这2个方法才能保证存入的对象的内容是不一样的
回复 使用道具 举报
百度了一下,结果是这样的:因为我们要比较的是对象里面的内容,而默认2个对象返回的哈希码值肯定是不一样的,哈希表首先回去判断2个对象的哈希码值,如果知道是不一样的,那么它就认为这2个对象时不一样的,但是如果内容是一样的呢,所以,我们要重写hashCode 把他们整一样了才有机会去比较内容,同理,比较完了hashCode ,Object.equals比较的是对象的地址值,同样默认是不一样的,所以又得重写它,里面就写了你要比较的内容。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马