java容器(數組和集合)內元素的排序問題


 

package com.janson.day20180827;

import java.util.*;

/**
 * java中容器內對象的排序可以通過Collections.sort()和Arrays.sort()兩種方法實現
 * 但用以上兩種方法有一個前提就是被排序的對象應該是支持排序的或可以比較的
 * 所以被排序的對象必須實現comparable接口或Comparator接口
 * comparable接口是排序接口,若一個類實現了該接口,就意味着該類支持排序
 * comparator接口是比較接口,我們如果要控制某個類的次序,而該類本身不支持排序(即沒有實現comparable接口),那么就可以建立一個“該類的比較器”來進行排序
 */
public class TestCompare {
    public static void main(String[] args) {
        /*
        *測試Person類排序
        */
        Person p1 = new Person("張三","男",30);
        Person p2 = new Person("李四","女",25);
        Person p3 = new Person("王五","女",28);
        Person[] p = new Person[3];
        p[0] = p1;
        p[1] = p2;
        p[2] = p3;
        System.out.println("Person排序前:");
        for (Person person : p) {
            System.out.println(person.getName() + "," + person.getSex() + "," + person.getAge());
        }
        //Arrays.sort(p); //當被比較的對象沒有實現排序接口或比較接口時,調用該方法就會失敗

        /*
         * 測試Panda類排序
         */
        Panda[] panda = new Panda[]{new Panda("P1","man",10), new Panda("P2","female",15),new Panda("P3","man",6)};
        //Panda[] panda = {new Panda("P1","man",10), new Panda("P2","female",15),new Panda("P3","man",6)};
        System.out.println("Panda排序前:");
        for (Panda pa : panda) {
            System.out.println(pa.getName() + "," + pa.getSex() + "," + pa.getAge());
        }
        Arrays.sort(panda);
        System.out.println("Panda排序后:");
        for (Panda pa : panda) {
            System.out.println(pa.getName() + "," + pa.getSex() + "," + pa.getAge());
        }

        /*
         * 測試Dog類排序
         */
        List<Dog> dogList = new ArrayList<>();
        dogList.add(new Dog("D1","M",20));
        dogList.add(new Dog("D2","F",18));
        dogList.add(new Dog("D3","M",16));
        System.out.println("Dog排序前:");
        for (Dog d : dogList) {
            System.out.println(d.getName() + "," + d.getSex() + "," + d.getAge());
        }
        Collections.sort(dogList,new DogComparator()); //用我們寫好的DogComparator對Dog進行排序
        System.out.println("Dog排序后:");
        for (Dog d : dogList) {
            System.out.println(d.getName() + "," + d.getSex() + "," + d.getAge());
        }
    }
}

/**
 * Person類沒有實現排序接口或比較接口
 */

class Person {
    private String name;
    private String sex;
    private int age;

    Person(String name,String sex,int age){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    String getName() {
        return name;
    }

    String getSex() {
        return sex;
    }

   int getAge() {
        return age;
    }
}

/**
 * Cat類實現了comparable排序接口
 */

class Panda implements Comparable<Panda>{
    private String name;
    private String sex;
    private int age;

    Panda(String name,String sex,int age){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    String getName() {
        return name;
    }

    String getSex() {
        return sex;
    }

    int getAge() {
        return age;
    }

    @Override
    public int compareTo(Panda p) {
        return this.getAge() - p.getAge();
    }
}

/**
 * Dog類
 */

class Dog {
    private String name;
    private String sex;
    private int age;

    Dog(String name,String sex,int age){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    String getName() {
        return name;
    }

    String getSex() {
        return sex;
    }

    int getAge() {
        return age;
    }

}

/**
 * 定義一個DogComparator類實現了comparator比較接口
 */
class DogComparator implements Comparator<Dog> {
    @Override
    public int compare(Dog o1, Dog o2) {
        return o1.getAge() - o2.getAge();
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM