Java Comparable接口

1 什么是Java Comparable接口

Java Comparable接口用于对用户定义的类的对象进行排序。该接口在java.lang包下,仅包含一个名为compareTo(Object) 的方法。它仅提供单个排序序列,意味着,您只能基于单个数据成员对元素进行排序。例如,可以是编号,名称,年龄或其他任何属性。

2 Comparable compareTo方法

public int compareTo(Object obj):用于将当前对象与指定对象进行比较。它返回

  • 如果当前对象大于指定对象,则为正整数。
  • 如果当前对象小于指定的对象,则为负整数。
  • 如果当前对象等于指定的对象,则返回零。

我们可以对以下元素进行排序:

  1. 字符串对象
  2. 包装类对象
  3. 用户自定义对象

3 Java Comparable示例:升序

让我们看一下Comparable接口的示例,该接口根据年龄对列表元素进行排序。

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */

import java.util.*;

/**
 * Java Comparable接口的例子
 */
class Student implements Comparable<Student>{
    int rollno;
    String name;
    int age;
    Student(int rollno,String name,int age){
        this.rollno=rollno;
        this.name=name;
        this.age=age;
    }

    public int compareTo(Student st){
        if(age==st.age)
            return 0;
        else if(age>st.age)
            return 1;
        else
            return -1;
    }
}


public class Demo{
    public static void main(String args[]){
        ArrayList<Student> al=new ArrayList<Student>();
        al.add(new Student(101,"Eric",23));
        al.add(new Student(106,"Rose",27));
        al.add(new Student(105,"Marl",21));

        Collections.sort(al);
        for(Student st:al){
            System.out.println(st.rollno+" "+st.name+" "+st.age);
        }
    }
}

输出结果为:

105 Marl 21
101 Eric 23
106 Rose 27

4 Java Comparable示例:倒序

让我们看一下Comparable接口的相同示例,该示例根据年龄以相反的顺序对列表元素进行排序。

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */

import java.util.*;

/**
 * Java Comparable接口的例子
 */
class Student implements Comparable<Student>{
    int rollno;
    String name;
    int age;
    Student(int rollno,String name,int age){
        this.rollno=rollno;
        this.name=name;
        this.age=age;
    }

    public int compareTo(Student st){
        if(age==st.age)
            return 0;
        else if(age<st.age)
            return 1;
        else
            return -1;
    }
}

public class Demo{
    public static void main(String args[]){
        ArrayList<Student> al=new ArrayList<Student>();
        al.add(new Student(101,"Eric",23));
        al.add(new Student(106,"Rose",27));
        al.add(new Student(105,"Mark",21));

        Collections.sort(al);
        for(Student st:al){
            System.out.println(st.rollno+" "+st.name+" "+st.age);
        }
    }
}

输出结果为:

106 Rose 27
101 Eric 23
105 Mark 21

 

推荐好课