Java 常用工具類--集合排序

集合排序

  • 使用Collections類的sort()方法
  • sort(List<T> list) 根據(jù)元素的自然順序?qū)χ付斜戆瓷蜻M(jìn)行排序。
  • 通過Collections.sort中實(shí)現(xiàn)comparator 接口對(duì)自定義對(duì)象進(jìn)行排序

對(duì)整形數(shù)據(jù)進(jìn)行排序

package com.alan.sort;

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

public class IntSort {

    public static void main(String[] args) {
        // 對(duì)存儲(chǔ)在List中對(duì)整形數(shù)據(jù)進(jìn)行排序
        // 定義泛型只能為對(duì)象,這里對(duì)int使用相應(yīng)的裝箱對(duì)象Integer,輸入整數(shù)時(shí)會(huì)自動(dòng)裝箱
        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();
        //使用Collections類對(duì)數(shù)據(jù)進(jìn)行排序
        Collections.sort(list);
        System.out.println("排序后:");
        for(int n:list) {
            System.out.print(n+" ");
        }

    }

}

對(duì)字符串進(jìn)行排序

package com.alan.sort;

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

public class StringSort {

    public static void main(String[] args) {
        // 對(duì)存放在List中的字符串進(jìn)行排序
        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("排序后:");
        for (String s : list) {
            System.out.print(s + " ");
        }

    }

}

Comparator接口介紹

  • 強(qiáng)行對(duì)某個(gè)對(duì)象進(jìn)行整體排序的比較函數(shù)。
  • 可以將Comparaotr傳遞給sort方法

對(duì)自定義寵物貓類分別按名字升序、年齡降序進(jìn)行排列

  • 首先定義寵物貓類
package com.alan.sort;

public class Cat {
    
    //屬性:名字、年齡、品種
    private String name;
    private int month;
    private String species;
    
    //無(wú)參構(gòu)造
    public Cat() {
        
    }
    //帶參構(gòu)造
    public Cat(String name, int month, String species) {
        this.name = name;
        this.month = month;
        this.species = species;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getMonth() {
        return month;
    }
    public void setMonth(int month) {
        this.month = month;
    }
    public String getSpecies() {
        return species;
    }
    public void setSpecies(String species) {
        this.species = species;
    }
    
    //由于使用了HashSet這里重寫ToString方法
    @Override
    public String toString() {
        return "[名字:" + name + ", 年齡:" + month + ", 品種:" + species +"]";
    }
}

  • 按名字排序重寫Comparator中的compare方法
package com.alan.sort;

import java.util.Comparator;

public class NameComparator implements Comparator<Cat> {

    @Override
    public int compare(Cat o1, Cat o2) {
        // 按照名字升序進(jìn)行排序
        String name1 = o1.getName();
        String name2 = o2.getName();
        int n = name1.compareTo(name2);
        return n;
    }

}

  • 按年齡排序重寫Comparator中的compare方法
package com.alan.sort;

import java.util.Comparator;

public class AgeComparator implements Comparator<Cat> {

    @Override
    public int compare(Cat o1, Cat o2) {
        // 按照寵物貓的年齡進(jìn)行降序排序
        int age1 = o1.getMonth();
        int age2 = o2.getMonth();
        //方法一:邏輯運(yùn)算復(fù)雜
//      if (age1 > age2) {
//          return -1;
//      } else if (age1 < age2) {
//          return 1;
//      } else {
//          return 0;
//      }
        //方法二:
        return age2-age1;

    }

}

  • 排序?qū)崿F(xiàn)主方法
package com.alan.sort;

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

public class CatSort {

    public static void main(String[] args) {
        // 對(duì)寵物貓對(duì)象進(jìn)行排序
        Cat huahua = new Cat("huahua", 2, "英國(guó)短毛貓");
        Cat fanfan = new Cat("fanfan", 5, "中華田園貓");
        Cat maomao = new Cat("maomao", 3, "中華田園貓");
        // 通過ArrayList存放Cat對(duì)象
        List<Cat> catList = new ArrayList<Cat>();
        catList.add(huahua);
        catList.add(fanfan);
        catList.add(maomao);
        System.out.println("按名字升序排序前:");
        for (Cat cat : catList) {
            System.out.println(cat);
        }
        // 通過重寫Collections中的Comparatror接口的compara方法。對(duì)其進(jìn)行排序
        Collections.sort(catList, new NameComparator());
        System.out.println("按名字升序排序后:");
        for (Cat cat : catList) {
            System.out.println(cat);
        }
        
        //調(diào)用AgeComparator類,實(shí)現(xiàn)按年齡降序排序
        System.out.println("按年齡降序排序前:");
        for (Cat cat : catList) {
            System.out.println(cat);
        }
        Collections.sort(catList, new AgeComparator());
        System.out.println("按年齡降序排序后:");
        for (Cat cat : catList) {
            System.out.println(cat);
        }
    }

}

Comparable接口

  • 此接口強(qiáng)行對(duì)實(shí)現(xiàn)它的每個(gè)類的對(duì)象進(jìn)行整體排序。
  • 這種排序被稱為類的自然排序,類的 compareTo 方法被稱為它
    的自然比較方法。
  • 對(duì)于集合,通過調(diào)用Collections.sort方法進(jìn)行排序。
  • 對(duì)于數(shù)組,通過調(diào)用Arrays.sort方法進(jìn)行排序。
  • 定義要實(shí)現(xiàn)的類的同時(shí)就實(shí)現(xiàn)了Comparable接口

使用Comparable接口對(duì)商品價(jià)格進(jìn)行降序排列

  • 定義商品類,同時(shí)重寫Comparable接口中的compareTo方法
package com.alan.sort;

public class Goods implements Comparable<Goods> {
    
    //屬性:商品編號(hào)、商品名稱、商品價(jià)格
    private String id;
    private String name;
    private double price;
    
    
    //帶參構(gòu)造
    public Goods(String id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }
    
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }


    @Override
    public String toString() {
        return "商品編號(hào):" + id + ", 商品名稱:" + name + ", 商品價(jià)格:" + price;
    }
    @Override
    public int compareTo(Goods o) {
        // 對(duì)對(duì)象中對(duì)價(jià)格屬性進(jìn)行比較,降序排列
        double price1 = this.getPrice();
        double price2 = o.getPrice();
    //  int n = new Double(price2-price1).intValue();
        int n = (int) (price2-price1);
        return n;
    }
}

  • 主方法中實(shí)現(xiàn)按商品價(jià)格降序排序
package com.alan.sort;

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

public class GoodsTest {

    public static void main(String[] args) {
        // 對(duì)商品對(duì)價(jià)格進(jìn)行降序排列
        Goods goods1 = new Goods("goods001","手機(jī)",888.88);
        Goods goods2 = new Goods("goods002","手表",588.88);
        Goods goods3 = new Goods("goods003","電腦",1888.88);
        
        //將商品存放到ArrayList中
        List<Goods> goodsList = new ArrayList<Goods>();
        goodsList.add(goods1);
        goodsList.add(goods2);
        goodsList.add(goods3);
        System.out.println("商品按價(jià)格排序前:");
        for(Goods goods:goodsList ) {
            System.out.println(goods);
        }
        Collections.sort(goodsList);
        System.out.println("商品按價(jià)格排序后:");
        for(Goods goods:goodsList ) {
            System.out.println(goods);
        }
        

    }

}
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容