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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 齐连涛 中级黑马   /  2012-10-20 10:50  /  2000 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lhkqlt 于 2012-10-20 12:52 编辑

TreeSet集合寸对象要实现Comparable,使其具备比较性,
为什么不是通过覆盖equals方法?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
那要首先分清equals方法和comparable方法的区别了,equals(Object anObject)
          将此字符串与指定的对象比较。而compare方法是比较两个对象后得出一个结论。TeerSet集合的第二种排序方式就是:让集合自身具有比较功能,定义一个类实现Comparator接口,覆盖compare方法。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
需求不同吧.
equals方法只是为比较,直接返回比较结果
comparable方法则是为了比较后对比较对象进行排序

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
是对象本身具备比较性,是实现Comparable接口,覆盖compareTo方法。
或者自定义比较器,实现comparator接口,覆盖compare方法。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
杨政 发表于 2012-10-20 11:17
需求不同吧.
equals方法只是为比较,直接返回比较结果
comparable方法则是为了比较后对比较对象进行排序 ...

好像是这样
回复 使用道具 举报
本帖最后由 陈虹旭 于 2012-10-22 08:53 编辑

TreeSet的两种排序方式:
第一种:传入的元素本身就具备比较性的情况,若传入实体对象,就要让实体对象的类实现Comparable接口,并覆盖接口的compareTo()方法
第二种:传入的元素本身不具备比较性,或者比较的属性并不是自己的需求,这时没有办法修改元素类中的原有内容,就要定义一个比较器,方法是定义一个比较器类,让这个类实现Comparator接口,并覆盖接口中的compare()方法,定义自己需求的比较内容,然后将比较器传给TreeSet集合,这样集合本身就会具备比较性了

这两种方式都适用于TreeSet集合,底层会直接调用compareTo()或compare(),这个于equals()是没有关系的,equal()一般用于数据类型本身就具有的比较方式

在HashSet中主要用到了这个方法,底层会直接调用hashCode()和equals()

新人,若有理解不对的地方望谅解,希望对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

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