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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闲人 中级黑马   /  2014-4-1 20:26  /  1713 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 闲人 于 2014-4-1 21:14 编辑

        public int compare(Object o1,Object o2)
        {
                Student s1 = (Student)o1;
                Student s2 = (Student)o2;
                int num = s1.getName().compareTo(s2.getName());
                if(num==0)
                {
                        return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
                }
                return num;
        }
------------------------------
这是今天看到的一段代码,里面的compare和compareTo方法,都是用来比较的,
但是搞不清有什么区别,分别在什么情况下使用?
求解

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

8 个回复

倒序浏览


treeSet集合:
         保证元素唯一性的依据:
         用compareTo方法return 0.
          TreeSet排序的第一种方式:让元素自身具备比较性。
          元素需要实现Comparable接口,覆盖compareTo方法
          也种方式也成为元素的自然顺序,或者叫做默认顺序。
          TreeSet的第二种排序方式
           当元素自身不具备比较性时,或者具备的比较性不是所需要的。
           这时就需要让集合自身具备比较性。
           在集合初始化时,就有了比较方式定义了比较器,定义一个类,实现Comparator接口,覆盖compare方法。将比较器对象作为参数传递给TreeSet集合的构造函数。
            当两种排序都存在时,以比较器为主。




评分

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

查看全部评分

回复 使用道具 举报
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
这种方式也成为元素的自然顺序,或者叫做默认顺序。

TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。

可以再看看毕老师java基础视频第15天04关于两种的比较方法,相信会受益匪浅。

评分

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

查看全部评分

回复 使用道具 举报
Up↑Lee↗ 发表于 2014-4-1 20:33
treeSet集合:
         保证元素唯一性的依据:         用compareTo方法return 0.           TreeSet排 ...

可否理解为compareTo在需要自然排序时,采用
而compare则是自定义排序内容时采用,
回复 使用道具 举报
闲人 发表于 2014-4-1 21:04
可否理解为compareTo在需要自然排序时,采用
而compare则是自定义排序内容时采用,
...

对对  就是这个意思
回复 使用道具 举报
compareTo()是实现了Comparable接口后要实现的方法,compare()是实现Comparator接口要实现的方法。我们自定义的对象往集合里存的时候,会对它们进行比较来判断是不是同一个元素,这个时候使对象具有比较性要实现Comparable接口重写它的compareTo()方法,这是一种办法,还有就是让容器自身具有比较性,这个时候就要新建一个类实现Comparator接口作为比较器,然后new一个比较器传进集合里面,使容器具有比较性。当这两种方法同时存在时,以带比较器的 为主。
在list集合里比较自定义对象只需要重写eaulas,在Hashset,Hashmap里比较时要重写equals和hashcode方法,Treeset.Treemap会实现Comparable或者Comparator接口

评分

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

查看全部评分

回复 使用道具 举报
感谢各位!
回复 使用道具 举报
compareTo()是对象实现可比性时重写的comparable()接口中的一个函数,compare()是定义比较器时重写的一个函数,compareTo封装在被比较对象的内部,而compare()封装在容器中,
回复 使用道具 举报
        compareTo()方法是Comparable接口唯一需要实现的方法。它的返回值不同于equals(),返回的是int值-1、0和1,而不是true和false。如果你的自定义类有自然顺序,那么最好也implements这个Comparable接口并实现compartTo()方法。事实上,Java类库中许多类都实现了这个接口,比如:String、Integer、Date、Time等等。
        最后compare()是Comparator接口的一个方法。最为常见的用法是自定义一个类实现Comparator接口,然后在调用Collection.sort()时作为参数传递。这样可以在compare()方法的实现中指定集合元素的排序规则。



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