📜  Java comparable接口

📅  最后修改于: 2020-10-13 00:39:36             🧑  作者: Mango

Java可比接口

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

compareTo(Object obj)方法

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

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

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

  • 字符串对象
  • 包装类对象
  • 用户定义的类对象

收藏类

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

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

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

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

Java可比示例

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

档案:Student.java

class Student implements Comparable{
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 al=new ArrayList();
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接口的相同示例,该示例根据年龄以相反的顺序对列表元素进行排序。

档案:Student.java

   class Student implements Comparable{  
    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

文件:TestSort2.java

    import java.util.*;  
    public class TestSort2{  
    public static void main(String args[]){  
    ArrayList al=new ArrayList();  
    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