Java 对象比较器

 

在Java中对于数组的排序可以通过  Arrays.sort()轻松实现,但是此方法不能直接对我们自定义

的类对象进行排序。Java里面提供了两个接口 :

(1)Comparable<T>接口

    当某个类实现了该接口后,该接口可以实现对类的对象进行一个强行排序,

    这种排序成为自然排序,compareTo()方法被称为自然排序方法。

(2)Comparator<T>接口

    相对于Comparable接口来说,Comparator接口遵循了面向对象开发原则,对修改关闭,

    向拓展开放。不用去修改已经定义好的类。

 

实现Comparable<T>代码示例:

package com.seven.javaSE;

import java.util.Arrays;

public class ComparableDemo {
    
    public static void main(String[] args) {
        User [] people = {new User("小明",6),new User("小王",5),new User("小李",7)};
        Arrays.sort(people);
        System.out.println(Arrays.toString(people));
    }
}

class User implements Comparable<User>{
    private String name;
    private int age;
    public User() {
        super();
    }
    public User(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    public String toString() {
        
        return "["+this.getName()+","+this.getAge()+"]";
        
    }
    
    //重写compareTo方法
    @Override
    public int compareTo(User user) {
        if(this.getAge()>user.getAge())
            return 1;
        else if(this.getAge()==user.getAge())
            return 0;
        return -1;
    }
    
}

 

重写Comparator<T>示例:

package com.seven.javaSE;

import java.util.Arrays;
import java.util.Comparator;

public class ComparatorDemo {
    
    public static void main(String[] args) {
        Cat [] cutes = {new Cat("小黑",2),new Cat("小白",1),new Cat("小黄",3)};
        Arrays.sort(cutes, new CatComparator());
        System.out.println(Arrays.toString(cutes));
    }
}

//采用了面向对象开发原则,没有在Cat类的基础上去修改,而是重新定义了一个类
class CatComparator implements Comparator<Cat>{

    @Override
    public int compare(Cat c1, Cat c2) {
        
        if(c1.getAge()>c2.getAge())
            return 1;
        else if(c1.getAge()<c2.getAge())
            return -1;
        return 0;
    }
    
}

class Cat{
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Cat(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public Cat() {
        super();
    }
    @Override
    public String toString() {
        return "[name=" + name + ", age=" + age + "]";
    }
    
}

 

posted @ 2022-05-24 18:56  藤原豆腐渣渣  阅读(91)  评论(0编辑  收藏  举报