JAVA学习笔记(二十三)-Comparable接口和Comparator接口

Comparable接口排序

/*
 * 学生类,实现Comparable接口,使其具有比较性
 */
public class Student implements Comparable
{
    private String name;// 姓名
    private int age;// 年龄
    private int score;// 成绩

    public Student()
    {
        super();
    }

    public Student(String name, int age, int score)
    {
        super();
        this.name = name;
        this.age = age;
        this.score = score;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public int getAge()
    {
        return age;
    }

    public void setAge(int age)
    {
        this.age = age;
    }

    public int getScore()
    {
        return score;
    }

    public void setScore(int score)
    {
        this.score = score;
    }

    @Override
    public String toString()
    {
        return "Student[name=" + name + ",age=" + age + ",score=" + score + "]";
    }

    //实现compareTo方法,定义比较规则
    @Override
    public int compareTo(Object o)
    {
        Student stu = (Student) o;
        if(this.age>stu.getAge()){
            return 250;
        }else if(this.age<stu.getAge()){
            return -13;
        }else{
            return 0;
        }

    }

}

Comparator接口排序


/*
 * 创建一个类,实现Comparator接口
 * 学生比较器,即实现对学生进行比较排序
 */
public class StudentComparator implements Comparator
{

    /*
     * 实现compare方法,比较用来排序的两个参数
     * 根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
     */
    @Override
    public int compare(Object o1, Object o2)
    {
        Student stu1 = (Student) o1;
        Student stu2 = (Student) o2;
        //根据学生的成绩进行比较
        /*int result=stu2.getScore()-stu1.getScore();
        return result;*/
        if(stu1.getScore()>stu2.getScore()){
            return 250;
        }else if(stu1.getScore()<stu2.getScore()){
            return -13;
        }else{
            return 0;
        }
    }

}

自定义比较器

import java.util.TreeSet;

/*
 * 测试类
 * TreeSet集合用于对集合中的元素进行排序
 * 
 *  * 排序的两种方式:
 * 1.自定义比较器
 * 定义一个类,实现Comparator接口,实现compare方法,
 * 将该类的实例作为TreeSet构造方法的参数,此时TreeSet集合就具有了比较性
 * 2.让元素本身具有比较性
 * 只要让元素实现Comparable接口,实现compareTo方法即可
 */
public class Test
{
    public static void main(String[] args)
    {
        test2();
    }

    // 方式一:自定义比较器
    public static void test1()
    {
        // 定义一个学生比较器
        StudentComparator sc = new StudentComparator();
        // 定义一个TreeSet集合,保存学生信息
        TreeSet ts = new TreeSet(sc);
        // 创建三个学生对象
        Student stu1 = new Student("唐伯虎", 20, 78);
        Student stu2 = new Student("秋香", 18, 93);
        Student stu3 = new Student("石榴姐", 23, 58);
        // 将学生对象添加到集合中
        ts.add(stu1);
        ts.add(stu2);
        ts.add(stu3);

        // 循环输出集合中的元素
        for (Object obj : ts)
        {
            // System.out.println(obj);
            System.out.println(obj.toString());
        }
    }

    // 方式二:使元素本身具有比较性
    public static void test2()
    {
        TreeSet ts = new TreeSet();
        Student stu1 = new Student("唐伯虎", 20, 78);
        Student stu2 = new Student("秋香", 18, 93);
        Student stu3 = new Student("石榴姐", 23, 84);
        ts.add(stu1);
        ts.add(stu2);
        ts.add(stu3);

        for (Object obj : ts)
        {
            System.out.println(obj);
        }
    }
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。