美文网首页
java (十) Comparable和Comparator对象

java (十) Comparable和Comparator对象

作者: Nic_ofh | 来源:发表于2017-09-27 23:28 被阅读0次

一、Comparator 和 Comparable 比较

  • Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
  • Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
我们不难发现:Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。

二、代码演示

Comparable(内部比较器)

// 类的自定义比较
class Dog implements Comparable<Dog> {
    private String name;
    private int age;

    public Dog(String name, int age) {
        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;
    }

    // 看你自己默认排序哪一个
    @Override
    public int compareTo(Dog o) {
        return this.age - o.age;  //调用Arrays.sort() 默认排序狗的年龄 从小到大排序
    }

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

Comparator(外部比较器)

// 想弄实例化的排序就要调用Comparator
class ReverSortDogName implements Comparator<Dog> {
    @Override
    public int compare(Dog o1, Dog o2) {
        return o2.getName().compareTo(o1.getName());
    }
}

执行

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

public class 简书 {
    public static void main(String[] args) {
        
        Dog[] dogs = new Dog[]{new Dog("欧富华", 23), new Dog("xie", 18), new Dog("哈哈", 12)};
        // Arrays.sort(dogs);Comparable ,执行这个方法默认是按age从小到大排序
        // Arrays.sort(dogs, new ReverSortDogName()); Comparator,按name字符串编码从大到小排序
        System.out.println(Arrays.toString(dogs));
    }


}

相关文章

网友评论

      本文标题:java (十) Comparable和Comparator对象

      本文链接:https://www.haomeiwen.com/subject/odepextx.html