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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李节起 中级黑马   /  2012-4-12 14:36  /  2403 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能简练解释一下:为什么?   以及什么情况下?
复写
compareTo、hashCode和equals

各有什么作用?

简练解释一下··谢谢

3 个回复

倒序浏览
本帖最后由 adison 于 2012-4-12 17:43 编辑

compareTo主要应用于TreeSet或TreeMap中,用于保证元素的唯一性,当其返回0表示对象相同,并通过返回正数或者负数来比较对象,再通过迭代器实现对集合元素排序。原因:底层数据结构是二叉树。
hashCode主要应用于HashSet或HashMap中,用于保证元素的唯一性,通过判断元素的hashCode值是否相同,不相同则对象不等,如果相同,还会继续判断元素的equals方法。原因:底层数据结构是哈希表
equals在Object中用来比较两对象的内存地址是否相同,但一般来说,都要复写它,用来判断对象的内容是否相同。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
重载equals():java中默认的对象的equals是当指向同一内存地址时才为true;如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法。

重载hashCode():只有当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才会重载hashCode,原因:就HashMap来说,好比HashMap就是一个大内存块,里面有很多小内存块,小内存块里面是一系列的对象,可以利用hashCode来查找小内存块hashCode%size(小内存块数量),所以当equal相等时,hashCode必须相等,而且如果是object对象,必须重载hashCode和equal方法。

实现接口Comparable:当需要调用sort()之类的函数要用到对象的比较的基本操作时候,就需要对Object的compareTo(Object arg0)进行实现。

回复 使用道具 举报
覆写compareto()方法是为了使你自己自定义的对象具有比较性,从而可以存储到TreeSet()集合中,
覆写hashCode和equals是让对象以你想要的标准判断是否为同一对象。比如人,你认为姓名和年龄相同的人对象就是一个对象,
就可以通过覆写这两个方法定义这种标准。
当要把对象存进TreeSet()和TreeMap()以及类似的有自动排序功能的集合时,覆写compareto();
当要把对象存入HashSet()或HashMap()这样底层为哈希表,并且要保证元素唯一的集合时,覆写hashCode和equals
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马