集合的排序


一、集合中的基本數據類型排序

1. 使用Collections類的sort()方法

2.sort(List<T> list):

  根據元素的自然順序對指定列表按照升序進行排序

package com.mpp.sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class IntSort {
    public static void main(String[] args) {
        //對存儲在List中的整形數據進行排序
        List<Integer> list = new ArrayList<Integer>();
        list.add(5);
        list.add(9);
        list.add(3);
        list.add(1);
        System.out.println("排序前:");
        for(int n:list){
            System.out.print(n+" ");
        }
        System.out.println();
        //對list中的數據進行排序
        System.out.println("排序后:");
        Collections.sort(list);
        for(int n:list){
            System.out.print(n+" ");
        }
    }
}

 

二、集合中的字符串排序

package com.mpp.sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class StringSort {
    public static void main(String[] args) {
        //對存放在List中的字符串進行排序
        List<String> list = new ArrayList<String>();
        list.add("orange");
        list.add("blue");
        list.add("yellow");
        list.add("gray");
        System.out.println("排序前:");
        for(String s:list){
            System.out.print(s+ " ");
        }
        System.out.println();
        Collections.sort(list);
        System.out.println("排序后:");   //按照ascll碼值進行排序
        for(String s:list){
            System.out.print(s+ " ");
        }
    }
}

 

三、Comparator接口

1. 強行對某個對象進行整體排序的比較函數

2. 可以將Comparator傳遞給sort方法(如Collections.sort或Array.sort)

3. int compare(T o1,T o2)比較用來排序的兩個參數

  -如果o1<o2,返回負整數

  -如果o1==o2,返回0

  -如果o1>o2,返回正整數

4. boolean equals(Object obj)指示某個其他對象是否“等於”此Comparator

  此方法可以被Object類中的equals方法覆蓋,不必重寫

例題:對寵物貓分別按名字升序,年齡降序

Cat類:

package com.mpp.sort;

public class Cat {
    private String name;    //名字
    private int mounth;     //年齡
    private String species;//品種

    public Cat(String name,int mounth,String species){
        super();
        this.setName(name);
        this.setMounth(mounth);
        this.setSpecies(species);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMounth() {
        return mounth;
    }

    public void setMounth(int mounth) {
        this.mounth = mounth;
    }

    public String getSpecies() {
        return species;
    }

    public void setSpecies(String species) {
        this.species = species;
    }

    //toString方法重寫
    @Override
    public String toString(){
        return "[名字:"+name+",年齡:"+mounth+",品種:"+species+"]";
    }

}

NameComparator類:

package com.mpp.sort;

import java.util.Comparator;

public class NameComparator implements Comparator<Cat> {

    @Override
    public int compare(Cat o1,Cat o2){
        //按名字升序排序
        String name1 = o1.getName();
        String name2 = o2.getName();
        //升序比較
//        int n = name1.compareTo(name2);  //name1>name2返回正整數,反之返回負整數,相等返回0
        //倒序比較
        int n = name2.compareTo(name1);
        return n;
    }
}

AgeComparator類

package com.mpp.sort;

import java.util.Comparator;

public class AgeComparator implements Comparator<Cat> {

    @Override
    public int compare(Cat o1,Cat o2){
        //按年齡降序排序
        int age1 = o1.getMounth();
        int age2 = o2.getMounth();
        int n = age1-age2;   //如果age1>age2,返回正數,反之返回負數,相等返回0
        return age2-age1;   //降序
//        return age1-age2;   //升序
    }
}

CatTest類:

package com.mpp.sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CatTest {
    public static void main(String[] args) {
        //按照名字升序排序
        Cat cafe = new Cat("cafe",5,"美短");
        Cat milk = new Cat("milk",3,"橘貓");
        Cat huahua = new Cat("huahua",2,"橘貓");
        List<Cat> list = new ArrayList<>();
        list.add(cafe);
        list.add(milk);
        list.add(huahua);
        //排序前
        System.out.println("排序前:");
        for(Cat cat:list){
            System.out.println(cat);
        }

        //按名字進行排序
        Collections.sort(list,new NameComparator());
        System.out.println("按名字排序后:");
        for(Cat cat:list){
            System.out.println(cat);
        }

        //按年齡進行降序排序
        Collections.sort(list,new AgeComparator());
        System.out.println("按年齡降序排序后:");
        for(Cat cat:list){
            System.out.println(cat);
        }
    }
}

 總結排序方式:

  1. 定義寵物貓類

  2. 定義比較器類,實現Conparator接口

  3. 排序,調用Collections.sort()方法,傳入要排序的存放類的list和比較器

四、Comparable接口

1. 此接口強行對實現它的每個類的對象進行整體排序

2. 這種排序被稱為類的自然排序,類的compareTo方法被稱為它的自然比較方法

3. 對於集合,通過調用Collections.sort方法進行排序

4. 對於數組,通過調用Array.sort方法進行排序

5. int compareTo(T o)方法

  該對象小於,等於或大於指定對象,則分別返回負整數,零或正整數

例:對商品價格進行降序排列

商品類:

package com.mpp.sort;

public class Goods implements Comparable<Goods> {
    private String id;
    private String name;
    private double price;

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public Goods(String id,String name,double price){
        this.id = id;
        this.name = name;
        this.price = price;
    }

    public String toString(){
        return "商品編號:"+id+",商品名稱:"+name+",商品價格:"+price;
    }

    @Override
    public int compareTo(Goods o) {
        //取出商品價格
        double price1 = this.getPrice();
        double price2 = o.getPrice();
        int n = new Double(price1-price2).intValue();  //升級排序
        //price2-price1;   //降序
        return n;
    }
}

商品測試類:

package com.mpp.sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class GoodsTest {
    public static void main(String[] args) {
        Goods g1 = new Goods("s001","手機",2000);
        Goods g2 = new Goods("s002","冰箱",5000);
        Goods g3 = new Goods("s003","電視機",3000);
        List<Goods> goodsList = new ArrayList<Goods>();

        goodsList.add(g1);
        goodsList.add(g2);
        goodsList.add(g3);

        //排序前
        System.out.println("排序前:");
        for(Goods g:goodsList){
            System.out.println(g);
        }
        Collections.sort(goodsList);
        //排序后
        System.out.println("排序后:");
        for(Goods g:goodsList){
            System.out.println(g);
        }

    }
}

總結排序方式:

  1. 定義商品類並實現Comparable接口,並且重寫compareTo()方法

  2. 定義商品測試類,把商品實例添加到ArrayList中,調用Colletcions.sort()做比較,傳入商品實例的list

 

 


免責聲明!

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



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