Java Comparator接口

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 com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * 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 com.yiidian;

import java.util.Comparator;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * 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 com.yiidian;

import java.util.Comparator;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * 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 com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
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

 

一点教程,一个分享编程知识的公众号。跟着站长一起学习和进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「一点教程」,你已然超越了90%的程序员!

一点教程二维码