集合排序

集合排序


對Int型進行排序

List<Integer> list= new arrayList<>();
list.add(3);
list.add(1);
list.add(56);
list.add(21);
Collections.sort(list);
System.out.println(lsit.toString());//1 3 21 56默認升序

對String類型進行排序

List<String> list = new ArrayList<>();
list.add("orange");
list.add("ob");
list.add("green");
list.add("yellow");
//進行排序
Collections.sort(list);//它是根據每個字元的asi碼進行排序
System.out.println(list.toString());

自定義的類如何排序

comparetor介面

  1. 編寫自定義類
  2. 編寫實現Comparator介面的實現類,並重寫compara方法
  3. 在測試類中使用Collections(排序的集合,排序規則);
int compare(T o1,T o2)比較用來排序的兩個參數
- o1<o2	返回負整數
- o1==o2 返回0
- o1>o2 返回正整數
package 集合排序;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class CatSort {
    public static void main(String[] args) {
        Cat cat1=new Cat("jom",25,"中華田園貓");
        Cat cat2=new Cat("jerry",22,"加菲貓");
        ArrayList<Cat> list = new ArrayList<>();
        list.add(cat1);
        list.add(cat2);
        Collections.sort(list,new AgeComparator());//傳入排序的類和排序的規則
        System.out.println(list);
    }

}
//按名字排序
class NameComparator implements Comparator<Cat>{

    @Override
    public int compare(Cat o1, Cat o2) {
        //按照名字升序排序
        return o1.getName().compareTo(o2.getName());//這裡的compareTo是比較字元串的大小的,返回情況和compare一樣
    }
}
//按年齡排序
class AgeComparator implements Comparator<Cat>{
    @Override
    public int compare(Cat o1, Cat o2) {
        int age1=o1.getMonth();
        int age2=o2.getMonth();
        return age1-age2;
    }
}

class Cat{
    private String name;
    private int month;
    private String species;

    public Cat(String name, int month, String species) {
        this.name = name;
        this.month = month;
        this.species = species;
    }

//省略了get和set方法

    @Override
    public String toString() {
        return "Cat[" + name + "," + month + "," + species + "]";
    }
}

comparable介面

特點

  • 對每個類的對象整體進行排序,成為自然排序

  • 類的comparaTo方法成為自然比較方法

  • 如果排序的是集合,調用Collections.sort()方法排序

  • 如果排序的是數字,調用Arrays.sort()方法排序

步驟

  1. 編寫自定義類,實現Comparable介面

  2. 實現comparaTo()方法

  3. 編寫測試類,使用Collections.sort(排序集合)進行排序

public int compareTo(Goods o) {//將當前對象(調用它的對象)和傳入的對象進行比較
        return (int) (this.price-o.getPrice());
 }
package 集合排序;

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

public class GoodsSort {
    public static void main(String[] args) {
        ArrayList<Goods> list = new ArrayList<>();
        list.add(new Goods("s001","電冰箱",3200));
        Collections.sort(list);
        System.out.println(list);

    }
}

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

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

  //省略了get和set方法
    
    @Override
    public String toString() {
        return "Goods{" +
                "商品編號=" + id +
                ", 商品名稱='" + name + '\'' +
                ", 商品價格=" + price +
                '}';
    }

    @Override
    public int compareTo(Goods o) {
        //根據商品的價格進行排序
        return (int) (this.price-o.getPrice());
    }
}

compartor介面和comparable介面區別

補充:

  • comparator介面是在比較的類外部實現介面,耦合低,可以創建多個類實現不同的比較方式
  • comparable介面是在實體類上實現介面,耦合高,也只能實現一種排序方式