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 + "]"; } }
本文来自博客园,作者:藤原豆腐渣渣,转载请注明原文链接:https://www.cnblogs.com/javafufeng/p/16306734.html