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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王东 中级黑马   /  2013-11-2 00:14  /  1286 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1 Comparable 和 Compartor具体有哪些不同?
2 Comparable 中实现的compareTo方法和equals方法有什么关系?如果重写的话,只重写compareTo或者equals其中的一个可不可以???
3 HashCode()和equals()有什么关系?重写的话重写一个可不可以?

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离.
对于某些对象如集合(TreeSet)需要实现内部排序,所以要实现Comparable接口,从而要实现里面的唯一方法compareTo();实现Comparable接口的对象表明遵循自然排序。从Comparable的API中可以看出:
重写compareTo()方法,不要求必须重写equals()方法,但是却强烈推荐重写equals()
对象想放到Set集合或者是想作为Map的key时(非散列的Set和Map,例如TreeSet,TreeMap等),那么你必须重写equals()方法,这样才能保证唯一性。当然,你不想重写hashCode()方法,也没有错。但是,对于良好的编程风格而言,你应该在重写equals()方法的同时,也重写hashCode()方法。
如果对象想放进散列存储的集合中(比如:HashSet,LinkedHashSet)或者想作为散列Map(例如:HashMap,LinkedHashMap等等)的Key时,在重写equals()方法的同时,必须重写hashCode()方法。

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Comparable 是在集合内部定义的方法实现的排序: public int compareTo(Object o);
Comparator 是在集合外部实现的排序: int compare(Object o1, Object o2);

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1. comparable 是类内的 比如Person继承这个接口 主要是实现自比较的 你可以看他俩的方法的参数  一个是传进来两个Object  一个是传进来一个  这样就决定他们应用的场景不同
2.我的理解 他们的返回值不同 他们都能比较对象  但是区别就在于返回值  equals 返回值boolean  只是比较   compareto 返回值是int  说明了在比较之后又根据返回值进行排序
3.为什么有equals了还用  hashcode 比如 set中就是先比较hashcode 再比较equal  因为hashcode执行的效率比equals高 hashcode是根据属性生成的 只要知道属性就行
而在equals 还用比较属性 判断引用等   简单来说就是 先比较hashcode如果不相等 那么就是说属性不一样那么就能放到set中 如果相等再比较equals 进一步确定
这么做有利于提升效率

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
加油哈,好好努力,为了黑马
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马