Java教程

Java Comparable接口

Java Comparable接口用于对用户定义的类的对象进行排序。该接口在java.lang包中找到,并且仅包含一个名为compareTo(Object)的方法。它仅提供单个排序序列,即,您只能基于单个数据成员对元素进行排序。例如,可以是rollno,名称,年龄或其他任何东西。

compareTo(Object obj)方法

public int compareTo(Object obj): 用于将当前对象与指定的对象。它返回
正整数,如果当前对象大于指定的对象。 负整数,如果当前对象小于指定的对象。 零,如果当前对象等于指定的对象。
我们可以对以下元素进行排序:
字符串对象 包装类对象 用户定义的类对象

Collections类

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

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

公共无效排序(列表列表) : 用于对List的元素进行排序。列表元素必须为Comparable类型。
注意: 默认情况下,String类和Wrapper类实现Comparable接口。因此,如果将字符串或包装类的对象存储在列表,集合或映射中,则默认情况下它是可比较的。

Java可比示例

让我们看一下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;
        elsereturn -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可比示例: 反向顺序

让我们看一下可比接口的相同示例,该示例根据年龄对列表元素进行反序排序。
文件: 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
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4