Java Comparable接口

Java Comparable接口用于对用户自定义类的对象进行排序。该接口位于java.lang包中,只包含一个名为compareTo(Object)的方法。它仅提供单一的排序顺序,即你可以根据单个数据成员对元素进行排序,例如rollno(学号)、name(姓名)、age(年龄)或其他任何属性。

compareTo(Object obj) 方法

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

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

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

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

Collections类

Collections类提供了对集合元素进行排序的静态方法。如果集合元素是Set或Map类型,我们可以使用TreeSet或TreeMap进行排序。然而,我们不能对List的元素进行排序。Collections类提供了对List类型元素进行排序的方法。

对List元素进行排序的Collections类方法

public void sort(List list):用于对List的元素进行排序。List元素必须是Comparable类型。

注意:String类和包装类默认实现了Comparable接口。因此,如果在列表、集合或映射中存储的是字符串或包装类的对象,它们将默认是可比较的。

Java Comparable示例

让我们来看一个使用Comparable接口对列表元素按照年龄排序的示例。

文件:Student.java

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; 
    } 
}

文件:TestSort1.java

import java.util.*; 

public class TestSort1 { 
    public static void main(String args[]) { 
        ArrayList<Student> al = new ArrayList<Student>(); 
        al.add(new Student(101, "Vijay", 23)); 
        al.add(new Student(106, "Ajay", 27)); 
        al.add(new Student(105, "Jai", 21)); 
        
        Collections.sort(al); 
        
        for (Student st : al) { 
            System.out.println(st.rollno + " " + st.name + " " + st.age); 
        } 
    } 
}

输出结果:

105 Jai 21
101 Vijay 23
106 Ajay 27

Java Comparable示例:逆序排序

让我们看一个使用Comparable接口将列表元素按年龄逆序排序的示例。

文件:Student.java

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;  
    }  
}

文件:TestSort2.java

import java.util.*;  

public class TestSort2 {  
    public static void main(String args[]) {  
        ArrayList<Student> al = new ArrayList<Student>();  
        al.add(new Student(101, "Vijay", 23));  
        al.add(new Student(106, "Ajay", 27));  
        al.add(new Student(105, "Jai", 21));  
        
        Collections.sort(al);  
        
        for (Student st : al) {  
            System.out.println(st.rollno + " " + st.name + " " + st.age);  
        }  
    }  
}

输出结果:

106 Ajay 27
101 Vijay 23
105 Jai 21

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想