Java中Comparable和Comparator的区别

Comparable:

Comparable定义在java.lang包里,意味着可以被比较的能力,因此某个类想要可以被排序,被比较大小,需要实现这个接口

public interface Comparable<T> {
    public int compareTo(T o);
}

Comparable测试代码:

  • 1、实现Comparable接口的Girl类
package comparabletest;
public class Girl  implements Comparable<Girl>{

    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 Girl(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 重写方法,自定义排序的策略
     * @param o
     * @return
     */
    @Override
    public int compareTo(Girl o) {
        return this.age -o.age;
    }

    @Override
    public String toString() {
        return "Girl{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}



  • 2、测试类
package comparabletest;
public class TestGirl {

    public static void main(String[] args) {

        Girl girl1 = new Girl("A", 20);
        Girl girl2 = new Girl("B", 15);
        System.out.println(girl1.compareTo(girl2));
    }
}

Comparator:

Comparator定义在java.util包中,代表着一个角色,这个角色的功能是对传入的两个元素进行大小的比较,并且返回结果.

public interface Comparator<T> {
    int compare(T o1, T o2);   
}

Comparator 测试代码:

  • 1、正常的Girl类
package comparatortest;
public class Girl {

    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 Girl(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Girl [name=" + name + ", age=" + age + "]";
    }

}
  • 2、实现外部的Comparator接口的类:
package comparatortest;
import java.util.Comparator;

public class GirlComparator implements Comparator<Girl> {


    /**
     * 重写这个方法:自定义比较策略--年龄比较大的就比较大
     * @param o1
     * @param o2
     * @return 比价值 大于0:o1比o2大           小于0:o1比o2小
     */
    @Override
    public int compare(Girl o1, Girl o2) {
        return o1.getAge() - o2.getAge();
    }
}
  • 3、测试类:
package comparatortest;
public class GirlTest {
    public static void main(String[] args) {

        Girl girl1 = new Girl("A", 20);
        Girl girl2 = new Girl("B", 15);
        GirlComparator girlComparator = new GirlComparator();
        int compare = girlComparator.compare(girl1, girl2);
        System.out.println(compare);
    }
}

Comparable和Comparator的主要区别在于:

  (1).Comparable和Comparator 和 都是Java中的内部比较器接口,都是用来实现对一个自定义的类进行排序

  (2). 不同的是实现Comparable接口是定义在类的内部,比较代码需要嵌入类的内部结构中

  (3). Comparator 实现在类的外部,单独实现第一个比较器,不需要对原来的类进行结构上的变化,属于无侵入式的。

posted @ 2020-09-17 21:44  Noob52037  阅读(211)  评论(0编辑  收藏  举报