【5】Java集合排序

一、集合排序

数组排序:

int[] arr={1,2,3};

Arrays.sort(arr);

 

集合排序:使用Collections类中 sort()方法对List集合进行排序

 Collections.sort(list) 

根据元素的自然顺序对指定列表按升序进行排序

如果是字符串或者字符数据按照Ascall码值进行排序

 

二、集合排序案例

1、整型数据如何排序 

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中的数据进行排序
        Collections.sort(list);
        System.out.println("排序后:");
        for(int n:list){
            System.out.print(n+"    ");
        }

    }

}
IntSort

 

 

2、string数据如何排序 StringSort

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("排序后:");
        for(String s:list){
            System.out.print(s+"   ");
        }
    }

}
StringSort

 

三、比较器

1、Comparator接口

1)强行对某个对象进行整体排序的比较函数;

2)可以将Comparator传递给sort方法(如 Collections.sort 或 Arrays.sort);

3)int compare(T o1, T o2) 用来比较排序的两个参数:

a. 如果 o1 < o2,返回负整数;

b. 如果 o1 == o2,返回0;

c. 如果 o1 > o2,返回正整数。

4)boolean equals(Object obj) 指示某个其他对象是否“等于”此Comparator;此方法可以被Object类中的equals方法覆盖,不必重写。

代码实例:

public class Cat {
    private String name; //名字
    private int month; //年龄
    private String species;//品种
    
    //构造方法
    public Cat(String name, int month, String species) {
        super();
        this.name = name;
        this.month = month;
        this.species = species;
    }
    //getter与setter方法
    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;
    }
    @Override
    public String toString() {
        return "[名字:" + name + ", 年龄:" + month + ", 品种:" + species + "]";
    }
}
Cat
import java.util.Comparator;

public class AgeComparator implements Comparator<Cat>{

    @Override
    public int compare(Cat o1, Cat o2) {
        // 按年龄降序排序
        int age1=o1.getMonth();
        int age2=o2.getMonth();
        return age2-age1;
    }

}
AgeComparator

 

import java.util.Comparator;

public class NameComparator implements Comparator<Cat> {//对Cat进行比较

    @Override
    public int compare(Cat o1, Cat o2) {
        // 按名字升序排序
        String name1=o1.getName();
        String name2=o2.getName();
        int n=name1.compareTo(name2);//比较两个字符串的内容,比较结果是int类型的变量
        return n;
    }

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

public class CatTest {

    public static void main(String[] args) {
        // 按名字升序排序
        Cat huahua=new Cat("huahua",5,"英国短毛猫");
        Cat fanfan=new Cat("fanfan",2,"中华田园猫");
        Cat maomao=new Cat("maomao",3,"中华田园猫");
        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.sort(catList, new NameComparator());
        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);
        }
    }

}
CatTest

 

 

2、Comparable接口

--此接口强行对实现它的每个类的对象进行整体排序。

--这种排序通常被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。

--对于集合和数组排序通过调用Collections.sort和Arrays.sort方法进行排序 int compareTo(T o)方法

--该对象小于、等于或大于指定对象(参数内对象),则分别返回负整数、零或正整数。

代码实例:

public 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;
    }

    //getter和setter方法
    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;
    }
    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(price2-price1).intValue();
        return n;
    }

}
Goods
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("s00001", "手机", 2000);
        Goods g2 = new Goods("s00002", "冰箱", 5000);
        Goods g3 = new Goods("s00003", "电视机", 3000);
        List<Goods> goodsList = new ArrayList<Goods>();
        goodsList.add(g1);
        goodsList.add(g2);
        goodsList.add(g3);
        // 排序前
        System.out.println("排序前:");
        for (Goods goods : goodsList) {
            System.out.println(goods);
        }
        Collections.sort(goodsList);
        // 排序后
        System.out.println("排序后:");
        for (Goods goods : goodsList) {
            System.out.println(goods);
        }

    }

}
GoodsTest

 

 

3、Comparator接口和Comparable接口的区别

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-06-18 21:53  柠檬不萌!  阅读(361)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end