| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1467 人关注过本帖
标题:对于对象的sort排序。
只看楼主 加入收藏
dousao
Rank: 2
等 级:论坛游民
帖 子:228
专家分:58
注 册:2007-11-8
结帖率:75%
收藏
 问题点数:0 回复次数:9 
对于对象的sort排序。
sort的排序对于对象,需要在类中实现comparable接口和comparaTo方法,我疑惑的是,实现这个方法是什么意思?为什么要规定大就是1,等于是0,小于是-1?对于排序有什么影响?如果有2个int成员变量,我想对a变量升序排列,或者对他降序排列,需要怎么实现comparaTo方法?麻烦举个简单的例子,这里不是很明白comparato的作用,谢谢
搜索更多相关主题的帖子: sort 对象 变量 comparaTo 接口 
2008-03-14 00:22
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
就是说,如果你想对自己写的类排序,你就把自己写的这个类实现Comparable接口,然后写一个comparaTo方法来规定这个类的对象排序的顺序。
在这个方法中,如果返回-1,则当前对象排前面,返回1,就排后面,0,就相等。例如:
import java.util.*;

public class A {
    public static void main(String args[]) {
        Example e1 = new Example(), e2 = new Example(), e3 = new Example();
        e1.i = 1;
        e2.i = 2;
        e3.i = 3;
        List l = new ArrayList();
        l.add(e1);
        l.add(e2);
        l.add(e3);
        Collections.sort(l);
        for(int i = 0; i < l.size(); i++) {
            System.out.println(l.get(i));
        }
    }
}

class Example implements Comparable {
    int i;
    public int compareTo(Object o) {
        if (this.i > ((Example)o).i ) return -1;
        else if (this.i < ((Example)o).i ) return 1;
        else return 0;
    }
    
    public String toString() {
        return "Example" + this.i;
    }
}
Example是自定义写的类,里面就一个int成员i。我们就可以根据这个i的大小来排序。在compareTo方法中,我定义了如果i大,那么就返回-1,则该对象就跑到前面去了。当然,如果你想定义i大的应该往后排,那么你可以改变返回值,从-1改为1。就是说 ,if里面是你要比较的条件,你可以根据这个条件来返回-1,0,1来将符合条件的对象放到前面、后面或者是不变。
在main方法中,我新建了3个Example对象,里面的i是1,2,3。注意我放入的顺序,是e1,e2,e3,当我调用sort方法后,再看输出结果,可以看到是e3,e2,e1,顺序跟我放入的顺序是相反的。就是这样实现排序的。

I'm here, as always...
2008-03-14 10:12
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
上面是放到一个List里面的。下面这个程序是一个Example数组:
import java.util.*;

public class A {
    public static void main(String args[]) {
        Example[] l = { new Example(1), new Example(4), new Example(6) };
        Arrays.sort(l);
        for (int i = 0; i < l.length; i++) {
            System.out.println(l[i]);
        }
    }
}

class Example implements Comparable {
    Example() {
    }

    Example(int i) {
        this.i = i;
    }

    int i;

    public int compareTo(Object o) {
        if (this.i > ((Example) o).i)
            return -1;
        else if (this.i < ((Example) o).i)
            return 1;
        else
            return 0;
    }

    public String toString() {
        return "Example" + this.i;
    }
}
这样看起来简单点,直接建一个Example的数组,用Arrays.sort排序......

I'm here, as always...
2008-03-14 10:28
dousao
Rank: 2
等 级:论坛游民
帖 子:228
专家分:58
注 册:2007-11-8
收藏
得分:0 
是不是这个意思?
sort排序是升序的,只不过sort不知道要排对象的哪个变量?
如果我通过j排,那么我就可以定义   j>(o.j)?1:(j==o.j)?0:-1);
2008-03-15 02:05
dousao
Rank: 2
等 级:论坛游民
帖 子:228
专家分:58
注 册:2007-11-8
收藏
得分:0 
comparato的作用只是告诉sort对哪个排序?
2008-03-15 02:07
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
compareTo方法里面决定了你自己的排序顺序,可以升序,也可以降序。这个方法返回-1的就排前面,返回1的就排后面,返回0的不变

I'm here, as always...
2008-03-17 10:01
dousao
Rank: 2
等 级:论坛游民
帖 子:228
专家分:58
注 册:2007-11-8
收藏
得分:0 
if (this.i > ((Example) o).i)
            return -1;
        else if (this.i < ((Example) o).i)
            return 1;
        else
            return 0;

这么排就是降序吧?
如果是升序就是这个么?
        if (this.i > ((Example) o).i)
            return 1;
        else if (this.i < ((Example) o).i)
            return -1;
        else
            return 0;
那么和大于小于有什么关系?
2008-03-28 09:20
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
如果没有大于小于你怎么比?比的是两个相同类型的对象啊,总得有一个属性来比吧。
this.i > ((Example)o).i return -1,通过这个我们就知道i大的返回-1,从而排在前面形成降序

I'm here, as always...
2008-03-28 09:39
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
普通排序是基于比较的,两个对象比较总要有个理由决定谁大。

Fight  to win  or  die...
2008-03-28 20:23
dousao
Rank: 2
等 级:论坛游民
帖 子:228
专家分:58
注 册:2007-11-8
收藏
得分:0 
终于懂了。。。郁闷。。
就是基于 对象中某个变量来排序,如果想让他降序就是当大于时候返回-1,升序就是小于时候返回-1,对吧
2008-03-30 02:32
快速回复:对于对象的sort排序。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036611 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved