黑马程序员技术交流社区

标题: 新手,求总结comper系列 [打印本页]

作者: 严海荣    时间: 2012-9-19 13:36
标题: 新手,求总结comper系列
本帖最后由 严海荣 于 2012-9-19 21:29 编辑

compare ,compareTo,Comperable, Comparator 这些都是怎么用的??
好复杂啊~~:Q
作者: 赵宇    时间: 2012-9-19 13:53
public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象在参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只有在方法 equals(Object) 返回 true 时才返回 0。
Comparable:

    一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。

Comparator:

    Comparator可以看成一种算法的实现,将算法和数据分离。

    Comparator也可以在下面两种环境下使用:

        类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身;

        可以使用多种排序标准,比如升序、降序等。

作者: 王自强    时间: 2012-9-19 16:07
TreeSet排序的有两种比较方法

第一种方式:让元素自身具备比较性。
步骤 1,集合中的元素类 implements Comparable接口,
        2,覆盖public int compareTo(Object obj)方法。
        也种方式也成为元素的自然顺序,或者叫做默认顺序。
例如:
1,class Student implements Comparable<Student>//(第一种方式)该接口强制让学生(集合中的元素)具备比较性。
{
private String name;
private int age;
Student(String name,int age)
{
        this.name = name;
        this.age = age;
}
2,public int compareTo(Student s)//******必须做*******
{
        int num = this.getAge()-s.getAge();
        if(num == 0)
                return this.getName().compareTo(s.getName());
        return num;
}
}
TreeSet<Student> ts = new TreeSet();//第一种实现元素比较性的方式!

第二种方式:传入一个比较器
        当元素自身不具备比较性时,或者具备的比较性不是所需要的。
        这时就需要让集合自身具备比较性。        
步骤 1,class MyCompare implements Comparator//定义的比较器
        2,public int compare(Object o1,Object o2)//需要实现的方法
        3,初始化时TreeSet ts = new TreeSet(new MyCompare());
例如:
1,class MyCompare implements Comparator<Student>//第二种实现元素比较性的方式=自定义的比较器。
{
2,public int compare(Student s1,Student s2)//********必须复写************
{
        //Student s1 = (Student)o1;//将元素向下转型!-----------------
        //Student s2 = (Student)o2;//

        int num = s1.name.compareTo(s2.name);
        if(num == 0)
                return (s1.age-s2.age);
        return num;
}
}
3,TreeSet<Student> ts = new TreeSet(new MyCompare());//第二种方式!用比较器的方法比较。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2