当前位置: 首页 > 教程 > Java集合 >

Java Comparator接口

精华
小牛编辑
202浏览
2023-03-14

1 什么是Java Comparator接口

Java Comparator接口用于对用户定义的类的对象进行排序。

该接口在java.util包下,包含2个方法compare(Object obj1,Object obj2)和equals(Object element)。

它提供了多种排序顺序,意味着,您可以根据任何数据成员(例如,编号,名称,年龄或其他任何属性)对元素进行排序。

2 Java Comparator接口的方法

方法 描述
public int compare(Object obj1, Object obj2) 将第一个对象与第二个对象进行比较。
public boolean equals(Object obj) 用于将当前对象与指定对象进行比较。

3 Java Comparator接口的例子

让我们来看一个根据年龄和姓名对List元素进行排序的示例。在此示例中,我们创建了4个Java类:

  • Student.java
  • AgeComparator.java
  • NameComparator.java
  • Demo.java

3.1 Student.java

package cn.xnip;

/**
 * 小牛知识库网: https://www.xnip.cn
 */
/**
 * Java Comparator 接口的例子
 */
class Student{
    int rollno;
    String name;
    int age;
    Student(int rollno,String name,int age){
        this.rollno=rollno;
        this.name=name;
        this.age=age;
    }
}

3.2  AgeComparator.java

package cn.xnip;

import java.util.Comparator;

/**
 * 小牛知识库网: https://www.xnip.cn
 */
/**
 * Java Comparator 接口的例子
 */
class AgeComparator implements Comparator {
    public int compare(Object o1,Object o2){
        Student s1=(Student)o1;
        Student s2=(Student)o2;

        if(s1.age==s2.age)
            return 0;
        else if(s1.age>s2.age)
            return 1;
        else
            return -1;
    }
}

3.3 NameComparator.java

package cn.xnip;

import java.util.Comparator;

/**
 * 小牛知识库网: https://www.xnip.cn
 */
/**
 * Java Comparator 接口的例子
 */
class NameComparator implements Comparator {
    public int compare(Object o1,Object o2){
        Student s1=(Student)o1;
        Student s2=(Student)o2;

        return s1.name.compareTo(s2.name);
    }
}

3.4 Demo.java

package cn.xnip;

/**
 * 小牛知识库网: https://www.xnip.cn
 */
import java.util.*;

/**
 * Java Comparator 接口的例子
 */
public class Demo{

    public static void main(String args[]){

        ArrayList al=new ArrayList();
        al.add(new Student(101,"Rose",23));
        al.add(new Student(106,"Jack",27));
        al.add(new Student(105,"Mark",21));

        System.out.println("Sorting by Name");

        Collections.sort(al,new NameComparator());
        Iterator itr=al.iterator();
        while(itr.hasNext()){
            Student st=(Student)itr.next();
            System.out.println(st.rollno+" "+st.name+" "+st.age);
        }

        System.out.println("Sorting by age");

        Collections.sort(al,new AgeComparator());
        Iterator itr2=al.iterator();
        while(itr2.hasNext()){
            Student st=(Student)itr2.next();
            System.out.println(st.rollno+" "+st.name+" "+st.age);
        }


    }
}

3.5 输出结果为

运行Demo类的main方法

Sorting by Name
106 Jack 27
105 Mark 21
101 Rose 23
Sorting by age
105 Mark 21
101 Rose 23
106 Jack 27