1. 程式人生 > >常用的比較器:實現方式Compareable和Comparator

常用的比較器:實現方式Compareable和Comparator

err 方式 pareto rri 編寫 sta urn getname rabl

class Dog{  
    int size;  
    int weight;  
   
    public Dog(int s, int w){  
        size = s;  
        weight = w;   
    }  
}  
   

目的:對於Dog對象作為元素所組成的數組進行對象屬性的自定義排序

一、外部比較器 Comparator:優點是不對源代碼造成影響

class DogSizeComparator implements Comparator<Dog>{  
   
    @Override  
    public
int compare(Dog o1, Dog o2) { return o1.size - o2.size; } } public class ArraySort { public static void main(String[] args) { Dog d1 = new Dog(2, 50); Dog d2 = new Dog(1, 30); Dog d3 = new Dog(3, 40); Dog[] dogArray = {d1, d2, d3}; printDogs(dogArray); Arrays.sort(dogArray,
new DogSizeComparator()); printDogs(dogArray); } public static void printDogs(Dog[] dogs){ for(Dog d: dogs) System.out.print("size="+d.size + " weight=" + d.weight + " "); System.out.println(); } }

  1、編寫一個外部比較器:實現Comparator泛型為需要排序對象的類,並重寫

compare(Dog o1, Dog o2)方法,如果進行正序的排序,那返回值為o1.屬性-o2.屬性,屬性為根據此排序的參考

  2、通過Arrays.sort(dogArray, new DogSizeComparator());參數為需要排序的對象的數組和對應比較器,進行排序

二、內部比較器Compareable:對象所屬的類需要實現Compareable接口

  

public class Person implements Comparable<Person>
{
    String name;
    int age;
    public Person(String name, int age)
    {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName()
    {
        return name;
    }
    public int getAge()
    {
        return age;
    }
    @Override
    public int compareTo(Person p)
    {
        return this.age-p.getAge();
    }
    public static void main(String[] args)
    {
        Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};
        System.out.println("排序前");
        for (Person person : people)
        {
            System.out.print(person.getName()+":"+person.getAge());
        }
        Arrays.sort(people);
        System.out.println("\n排序後");
        for (Person person : people)
        {
            System.out.print(person.getName()+":"+person.getAge());
        }
    }
}

  1所需要排序數組的元素對象所屬的類 必須要實現Compareable接口並重寫 compareTo()方法 正序返回this.屬性-參數對象.屬性 反序則取反。

  2對於該對象的數組使用Arrays.sort(people)進行排序

常用的比較器:實現方式Compareable和Comparator