黑马程序员技术交流社区
标题:
求大神,问几个问题。
[打印本页]
作者:
王东
时间:
2013-11-2 00:14
标题:
求大神,问几个问题。
1 Comparable 和 Compartor具体有哪些不同?
2 Comparable 中实现的compareTo方法和equals方法有什么关系?如果重写的话,只重写compareTo或者equals其中的一个可不可以???
3 HashCode()和equals()有什么关系?重写的话重写一个可不可以?
作者:
龏鈊づ廱鵆ぐ
时间:
2013-11-2 09:22
一个类实现了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()方法。
作者:
。。。。。。。
时间:
2013-11-2 09:59
Comparable 是在集合内部定义的方法实现的排序: public int compareTo(Object o);
Comparator 是在集合外部实现的排序: int compare(Object o1, Object o2);
作者:
qixing0918
时间:
2013-11-2 10:49
1. comparable 是类内的 比如Person继承这个接口 主要是实现自比较的 你可以看他俩的方法的参数 一个是传进来两个Object 一个是传进来一个 这样就决定他们应用的场景不同
2.我的理解 他们的返回值不同 他们都能比较对象 但是区别就在于返回值 equals 返回值boolean 只是比较 compareto 返回值是int 说明了在比较之后又根据返回值进行排序
3.为什么有equals了还用 hashcode 比如 set中就是先比较hashcode 再比较equal 因为hashcode执行的效率比equals高 hashcode是根据属性生成的 只要知道属性就行
而在equals 还用比较属性 判断引用等 简单来说就是 先比较hashcode如果不相等 那么就是说属性不一样那么就能放到set中 如果相等再比较equals 进一步确定
这么做有利于提升效率
作者:
狼王
时间:
2013-11-3 07:33
加油哈,好好努力,为了黑马
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2